아이콘 용 밉맵 드로어 블


449

Android 4.3 (Jelly Bean)부터는 res/mipmap폴더를 사용하여 "밉맵"이미지를 저장할 수 있습니다.

예를 들어 Android 용 Chrome 은 더 일반적인 res/drawable폴더 대신이 폴더에 아이콘을 저장합니다 .

이 밉맵 이미지는 다른 친숙한 드로어 블 이미지와 어떻게 다릅니 까?

내 매니페스트 에서 리소스 폴더 이름이 지정된 @mipmap/대신에 한정자를 사용합니다 @drawable/.

<activity
    android:name=".MipmapDemp"
    android:icon="@mipmap/ic_launcher" />

참고 문헌 :

안드로이드 4.3 API를 문서는 말할 다음이있다 :

밉맵을 비트 맵 또는 드로어 블의 소스로 사용하는 것은 고품질 이미지와 다양한 이미지 스케일을 제공하는 간단한 방법으로, 애니메이션 중에 이미지의 스케일이 예상되는 경우 특히 유용합니다.

Android 4.2 (API 레벨 17)는 Bitmap 클래스에서 밉맵 지원을 추가했습니다. 밉맵 소스를 제공하고 setHasMipMap ()을 활성화하면 Android가 비트 맵의 ​​밉 이미지를 교체합니다. 이제 Android 4.3에서는 밉맵 자산을 제공하고 비트 맵 리소스 파일에서 android : mipMap 속성을 설정하거나 hasMipMap ()을 호출하여 BitmapDrawable 객체에 밉맵을 활성화 할 수 있습니다.

나는 거기에 내가 이해하는 데 도움이되는 것을 보지 못했습니다.


XML 비트 맵 리소스 에는 다음과 같은 android:mipMap속성이 있습니다.

부울. 밉맵 힌트를 활성화하거나 비활성화합니다. 자세한 내용은 setHasMipMap ()을 참조하십시오. 기본값은 false입니다.

내가 볼 수있는 한 실행기 아이콘에는 적용되지 않습니다.


Romain Guy가 대답 한 Google 그룹스 ( 자원 이름 "mipmap"?! ) 에 대한 질문이 제기되었습니다 .

일반적으로 계산되는 더 큰 해상도로 이미지를 제공하는 것이 좋습니다 (예를 들어 mdpi 장치에서 Launcher는 더 큰 hdpi 아이콘으로 큰 앱 바로 가기를 표시 할 수 있습니다).

나는 이것이 거의 의미가 있다고 생각하지만, 그렇지 않습니다.

나는 여전히 랜디 수기 안토의 후속 조치를 따르려고한다.

이것의 장점은 무엇입니까? 더 나은 실행기 아이콘을 위해 밉맵을 사용하는 방법에 대한 가이드가 있습니까?


물론 Wikipedia에는 ​​"Mipmap"에 대한 페이지가 있습니다.이 페이지 는 1983 년에 발명 된 기존 기술을 나타내며 현재 Android 구현과 관련이 없습니다.


요즈음 모든 앱 아이콘을 res/mipmap폴더에 저장해야합니까 ? 이러한 밉맵 이미지에 대한 지침 은 무엇 입니까?


업데이트 # 1

여기에 약간의 설명을 시도하는 블로그 게시물이 있습니다.

그러나 해당 블로그 게시물에 사용 된 이미지는 로고가 많은 하나의 파일처럼 보이는 것을 보여줍니다. 이것은 Chrome의 밉맵 폴더에 표시되지 않습니다.

Chrome의 mipmap-hdpi폴더에는 3 개의 이미지가 있습니다. 하나는 Chrome 로고입니다.

크롬 밉맵 -hdpi icon.png

이상하게도 볼 것으로 예상되는 48x48이 아니라 72x72입니다.

아마도 이것이 전부입니다. 우리는 밉맵 폴더에 더 큰 아이콘을 유지해야합니까?


업데이트 # 2

2014 년 10 월 23 일의 Android 개발자 블로그 게시물은 mipmap애플리케이션 아이콘에 폴더를 사용한다는 아이디어를 다시 확인합니다 .

Nexus 6 화면 밀도에 대해 이야기 할 때 저자는 다음과 같이 씁니다.

앱 아이콘은 장치의 현재 밀도와 다른 해상도에서 사용되므로 밉맵 폴더 (드로어 블 폴더가 아님)에 배치하는 것이 가장 좋습니다. 예를 들어, xxhdpi 장치의 실행기에서 xxxhdpi 앱 아이콘을 사용할 수 있습니다.


업데이트 # 3

Android Studio 는 Eclipse ic_launcher.png에서 아이콘 을 작성하는 데 사용한 폴더가 mipmap...아닌 폴더에 아이콘 drawable...을 작성합니다.


답변:


260

밉맵에는 두 가지 용도가 있습니다.

  1. 밀도 별 APK를 빌드 할 때 실행기 아이콘의 경우 일부 개발자는 모든 밀도에 대해 별도의 APK를 작성하여 APK 크기를 줄입니다. 그러나 일부 런처 (일부 장치와 함께 제공되거나 Play 스토어에서 사용 가능)는 표준 48dp보다 큰 아이콘 크기를 사용합니다. 실행 프로그램은 getDrawableForDensity를 사용하고 필요에 따라 확대하지 않고 축소하므로 아이콘의 품질이 우수합니다. 예를 들어 hdpi 태블릿에서 실행기는 xhdpi 아이콘을로드 할 수 있습니다. 런처 아이콘을 mipmap-xhdpi 디렉토리에 배치하면 hdpi 장치 용 APK를 빌드 할 때 drawable-xhdpi 디렉토리와 같은 방식으로 제거되지 않습니다. 모든 장치에 대해 하나의 APK를 작성하는 경우 실행기가 원하는 밀도의 드로어 블 리소스에 액세스 할 수 있으므로 실제로 중요하지 않습니다.

  2. 4.3의 실제 밉맵 API 나는 이것을 사용하지 않았고 그것에 익숙하지 않다. 그것은 안드로이드 오픈 소스 프로젝트 런처에서 사용되지 않으며 다른 런처를 사용하는 것을 알지 못합니다.


2
따라서 올바르게 이해하면 밉맵 리소스를 제외한 모든 리소스에 대해 잘못된 밀도 폴더를 제거하는 빌드 스크립트를 제안하고 있습니까?
Richard Le Mesurier 2018 년

20
모든 밀도에 대해 하나의 APK를 작성하고 걱정하지 말 것을 제안합니다. 그렇습니다. 밉맵 디렉토리가 때때로 런처 아이콘에 사용되는 이유는 빌드 스크립트 (aapt --preferred-configurations)가 drawable- {density} 디렉토리를 제거하지만 mipmap- {density} 디렉토리는 제거하지 않기 때문입니다. 버그를 악용하는 것처럼 보이지만 Romain Guy와 Diane Hackborn의 plus.google.com/105051985738280261832/posts/QTA9McYan1L 게시물에서 인용 한 내용은 의도적으로 설계된 것입니다.
케빈 테슬라 코일

3
밉맵을 삭제하고 아이콘을 드로어 블에 배치하고 단일 APK를 작성하는 일반적인 프로세스는 완벽합니다. 밉맵은 대부분의 개발자에게 비정형적인 것처럼 들리지만 우리 모두에게 강요됩니다.
누군가 어딘가에

문서에는 "밉맵 : 다른 런처 아이콘 밀도에 대한 드로어 블 파일"이라고 표시되어 있습니다. developer.android.com/guide/topics/resources/…
활동

79

Google 은이 모든 답변 이후 문서를 업데이트 한 것으로 보이 므로 앞으로 다른 사람에게 도움이되기를 바랍니다.

TL; DR : 드로어 블은 dp 특정 자원 최적화의 일부로 제거 될 수 있습니다. 밉맵은 제거되지 않습니다.

다른 기기의 다른 홈 화면 런처 앱은 다양한 해상도에서 앱 런처 아이콘을 보여줍니다. 앱 리소스 최적화 기술이 사용되지 않은 화면 밀도에 대한 리소스를 제거하면 런처 앱이 저해상도 아이콘을 업 스케일하여 표시하기 때문에 런처 아이콘이 흐릿하게 보일 수 있습니다. 이러한 표시 문제를 피하려면 앱 mipmap/에서 실행기 아이콘에 리소스 폴더를 사용해야합니다 . Android 시스템은 밀도 제거와 상관없이 이러한 리소스를 유지하고 런처 앱이 디스플레이에 가장 적합한 해상도로 아이콘을 선택할 수 있도록합니다.

( http://developer.android.com/tools/projects/index.html#mipmap에서 )


2
이는 이미지 자산을 가져올 때 Android Studio의 기본 배치와 일치합니다. 실행기 아이콘은 밉맵으로 이동합니다. 다른 사람들은 드로어 블에 들어갑니다.
Edward Brey

2
설명서가 다시 변경된 것 같습니다. mipmap이 developer.android.com/tools/projects/index.html 에 존재하지 않는 것 같습니다 (Android 설명서의 다른 비트는 여전히 참조하려고 시도하지만).
누군가

28

이 밉맵 이미지는 다른 친숙한 드로어 블 이미지와 어떻게 다릅니 까?

차이점을 설명하려는 두 센트가 있습니다. Android에서 이미지로 작업 할 때 처리하는 두 가지 경우가 있습니다.

  1. 장치 밀도에 대한 이미지를로드 하고 실제 크기를 변경하지 않고 "있는 그대로"사용하려고합니다 . 이 경우 드로어 블로 작업해야 하며 Android에서 가장 적합한 이미지를 제공합니다.

  2. 장치 밀도에 대한 이미지를로드 하려고 하지만이 이미지 가 확대 또는 축소됩니다 . 예를 들어 더 큰 런처 아이콘을 표시하거나 애니메이션을 사용하여 이미지 크기를 늘리려는 경우에 필요합니다. 이러한 경우 최상의 이미지 품질을 얻으려면 이미지를 밉맵 폴더에 넣어야 합니다. 안드로이드는 이미지를 스케일링하는 대신 고밀도 버킷에서 이미지를 픽업하려고 시도합니다. 이미지의 선명도 (품질)가 높아집니다.

따라서 이미지를 넣을 위치를 결정하는 경험 법칙은 다음과 같습니다.

  • 실행기 아이콘은 항상 밉맵 폴더 로 이동 합니다.
  • 종종 크기가 커지 거나 앱에서 품질이 중요한 이미지는 밉맵 폴더로 이동 합니다.
  • 다른 모든 이미지 는 일반적인 드로어 블 입니다.

액션 바 아이콘 또는 플로팅 버튼 아이콘이 밉맵으로 이동합니까?
Juan De la Cruz

아니요, 보통 드로어 블입니다.
sergej shafarenka

23

4.3에서 안드로이드의 밉맵 구현은 Wikipedia 기사에서 설명 된 1983 년의 기술입니다. :)

밉맵 세트의 각 비트 맵 이미지는 기본 텍스처의 축소 된 복제본이지만 특정 수준의 세부 수준이 감소합니다. 뷰가 상세하게 렌더링하기에 충분할 때 메인 텍스처가 여전히 사용되지만, 렌더러는 텍스처를 멀리서 또는 작은 크기로 볼 때 적절한 밉맵 이미지 (...)로 전환합니다.

비록 이것이 "먼 거리에서 볼 때"를 언급하는 것처럼 3D 그래픽을위한 기술로 설명되었지만, 2D에도 적용됩니다 ( "그린 공간은 더 작은 공간", 즉 "다운 스케일"로 번역됨).

구체적인 Android 예제의 경우 특정 배경 드로어 블 (특히 a BitmapDrawable) 이있는보기가 있다고 가정하십시오 . 이제 애니메이션을 사용하여 원래 크기의 0.15로 조정합니다. 일반적으로 각 프레임마다 배경 비트 맵을 축소해야합니다. 그러나이 "익스트림"다운 스케일링은 시각적 아티팩트를 생성 할 수 있습니다.

그러나 밉맵을 제공 할 수 있습니다. 즉, 이미지가 몇 가지 특정 배율 (1.0, 0.5 및 0.25)로 이미 사전 렌더링되었음을 의미합니다. 애니메이션이 원래의 1.0 크기 이미지를 계속 축소하는 대신 0.5 임계 값을 "교차"할 때마다 0.5 이미지로 전환하고 축소하여 더 나은 결과를 제공합니다. 그리고 애니메이션이 계속되는 것처럼.

이것은 렌더러가 실제로 수행하기 때문에 약간 이론적입니다. Bitmap 클래스의 출처에 따르면 힌트 일 뿐이며 렌더러가이를 존중할 수도 있고 그렇지 않을 수도 있습니다.

/**
 * Set a hint for the renderer responsible for drawing this bitmap
 * indicating that it should attempt to use mipmaps when this bitmap
 * is drawn scaled down.
 *
 * If you know that you are going to draw this bitmap at less than
 * 50% of its original size, you may be able to obtain a higher
 * quality by turning this property on.
 * 
 * Note that if the renderer respects this hint it might have to
 * allocate extra memory to hold the mipmap levels for this bitmap.
 *
 * This property is only a suggestion that can be ignored by the
 * renderer. It is not guaranteed to have any effect.
 *
 * @param hasMipMap indicates whether the renderer should attempt
 *                  to use mipmaps
 *
 * @see #hasMipMap()
 */
public final void setHasMipMap(boolean hasMipMap) {
    nativeSetHasMipMap(mNativeBitmap, hasMipMap);
}

그래도 이것이 왜 응용 프로그램 아이콘에 적합한 지 잘 모르겠습니다. 태블릿의 Android 및 일부 실행기 (예 : GEL)가 아이콘을 더 크게 표시하기 위해 "한 밀도 더 높은"아이콘을 요청하지만 이는 일반적인 메커니즘 (예 drawable-xxxhdpi: & c)을 사용하여 수행됩니다 .


이것은 실제로 drawablemipmapped 이미지를 포함 하는 폴더와 의 차이점을 설명하지 않습니다 .
Timmmm

2
실제로이 답변은 잘못되었습니다. 유일한 차이점은 파일이 제거 여부에 관계없이 - 그것은 여부하는 것은 (이 두 경우에) 사용 밉과는 아무 상관이 없습니다. 폴더 이름이 잘못되었습니다. 그들은 아마도 그것을 불렀을 drawable-nostrip것입니다.
Timmmm

2
밉맵에 대한 멋진 설명이지만 Google 문서 항목을 언급하는 Kazuaki 의 대답은 실제로 그 이유가 아님을 나타냅니다.
Trilarion

11

다른 스레드에서 언급 할만한 한 가지는 다른 밀도에 대해 다른 버전의 앱을 빌드하는 경우 "mipmap"리소스 디렉토리에 대해 알아야합니다. 이것은 다른 apk 대상을 만들 때 밀도 제거에 참여하지 않는다는 점을 제외하고는 "드로어 블"리소스와 정확히 같습니다.

https://plus.google.com/105051985738280261832/posts/QTA9McYan1L


... 그렇습니다. 케빈이 대답에서 언급 한 것처럼 말입니다. 이것이 그 배후의 주된 이유 인 것 같습니다.
Richard Le Mesurier

@RichardLeMesurier 예, 짧고 명확하게하기 위해
kreker

4

알림 아이콘의 올바른 유형을 결정하기 위해 이에 대한 명확한 답변을 찾고 있었 으므로이 명확한 진술을 주제에 추가하고 싶습니다. http://developer.android.com/tools/help/image-asset-studio.html#saving 에서 가져 왔습니다.

참고 : 실행기 아이콘 파일은 다른 아이콘과 다른 위치에 있습니다. 그것들은 mipmap / 폴더에 있습니다. 다른 모든 아이콘 파일은 프로젝트 의 drawable / 폴더 에 있습니다.


2

밀도가 다른 별도의 APK를 만들면 다른 밀도의 드로어 블 폴더가 제거됩니다. 이렇게하면 밀도가 높은 실행기 아이콘을 사용하는 장치에서 아이콘이 흐릿하게 나타납니다. 밉맵 폴더는 제거되지 않으므로 실행기 아이콘을 포함하는 데 항상 사용하는 것이 가장 좋습니다.


2

Android에서 이미지로 작업 할 때 처리하는 두 가지 경우가 있습니다.

  1. 장치 밀도에 대한 이미지를로드하고 실제 크기를 변경하지 않고 "있는 그대로"사용하려고합니다. 이 경우 드로어 블로 작업해야하며 Android에서 가장 적합한 이미지를 제공합니다.
  2. 장치 밀도에 대한 이미지를로드하려고하지만이 이미지가 확대 또는 축소됩니다. 예를 들어 더 큰 런처 아이콘을 표시하거나 애니메이션을 사용하여 이미지 크기를 늘리려는 경우에 필요합니다. 이러한 경우 최상의 이미지 품질을 얻으려면 이미지를 밉맵 폴더에 넣어야합니다. 안드로이드는 이미지를 스케일링하는 대신 고밀도 버킷에서 이미지를 픽업하려고 시도합니다.

그래서

따라서 이미지를 넣을 위치를 결정하는 경험 법칙은 다음과 같습니다.

  1. 실행기 아이콘은 항상 밉맵 폴더로 이동합니다.

  2. 종종 크기가 커지거나 앱에 품질이 중요한 이미지는 밉맵 폴더로 이동합니다.

  3. 다른 모든 이미지는 일반적인 드로어 블입니다.

기사 에서 인용 .


1
res/
mipmap-mdpi/ic_launcher.png (48x48 pixels)
mipmap-hdpi/ic_launcher.png (72x72)
mipmap-xhdpi/ic_launcher.png (96x96)
mipmap-xxhdpi/ic_launcher.png (144x144)
mipmap-xxxhdpi/ic_launcher.png (192x192)

실행 기용 앱 아이콘 용 MipMap

http://android-developers.blogspot.co.uk/2014/10/getting-your-apps-ready-for-nexus-6-and.html

https://androidbycode.wordpress.com/2015/02/14/goodbye-launcher-drawables-hello-mipmaps/


두 번째 블로그 게시물에 감사드립니다! 폴더 의 사용법 drawable-XXXmipmap-XXX폴더 의 차이점을 명확하게 설명합니다 . 런처 아이콘은 사용자 런처에 더 높은 해상도의 아이콘이 표시 될 수 있으므로 다른 리소스와 다릅니다. 고해상도 이미지가 드로어 블 폴더에서 제거 된 경우, 저밀도 아이콘이 프로그래밍 방식으로 업 스케일됩니다. 이로 인해 매력이 희미한 아이콘이 나타날 수 있습니다.
winklerrr

Nexus 8.1의 Android 8.1에서는 드로어 블 폴더의 시작 아이콘이 확대되지 않습니다. 실제로 전혀 찾을 수 없으며 앱을 열 때 충돌이 발생합니다.
matthew

1

HDPI와 같은 대상 화면 해상도의 APK를 빌드하면 Android 자산 패키지 도구 인 AAPT가 필요없는 다른 해상도의 드로어 블을 제거 할 수 있지만 밉맵 폴더에있는 경우 이러한 자산은 대상 해상도에 관계없이 APK.


-1

밉맵에 대한 이해는 다소 비슷합니다.

화면 크기가 다른 해상도를 사용하여 이미지를 그려야 할 경우 일부 스케일링이 필요합니다.

저사양 휴대 전화에 적합한 이미지가있는 경우 10 "태블릿 크기로 확장 할 때 실제로 존재하지 않는 픽셀을"발명 "해야합니다. 이는 일부 보간 알고리즘으로 수행됩니다. 발명해야 할 픽셀의 양이 많을수록 프로세스 시간이 오래 걸리고 품질이 떨어지기 시작합니다. 최고의 품질은 더 긴 시간이 걸리는 복잡한 알고리즘 (예 : 주변 픽셀의 평균 대 가장 가까운 픽셀을 복사하는 것)을 통해 얻을 수 있습니다.

발명해야 할 픽셀 수를 줄이기 위해 밉맵을 사용하면 동일한 이미지의 다양한 크기 / 해상도를 제공하며 시스템은 렌더링해야 할 해상도에 가장 가까운 이미지를 선택하고 그 위치에서 배율을 조정합니다. 이것은 좋은 품질의 이미지를 제공하기 위해 이들 픽셀을 계산하는데 사용될 자원 절약 자원의 수를 줄여야한다.

이미지 크기를 조정할 때 libgdx의 성능 문제를 설명하는 기사에서 이것에 대해 읽었습니다.

http://www.badlogicgames.com/wordpress/?p=1403

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.