2012-04-04 4 views
2

화면의 크기를 조절해야하는 이미지가 있습니다. 이미지에는 텍스트가 포함되어있어 제 2 언어로 번역해야합니다. 따라서 각 이미지에 대해 각 언어에 대해 하나씩 두 가지 버전이 시작됩니다.Android 대안 드로어 블 리소스 줄이기

밀도 당 이미지 리소스가있는 것이 좋습니다. 그래서 나는 두 개의 이미지를 xhdpi, hdpi, mdpi, ldpi와 같이 4 배로 늘릴 것입니다. 그러나 구글은 화면 크기에 따라 다른 이미지 리소스를 사용한다고 말합니다. 그러면 이미지가 4 배로 확대됩니다 (크고 크고 평범하고 작음). 나는 모든 이미지의 32 사본을 만들고 싶지 않다!

xlarge 화면과 xhdpi 밀도 용 이미지를 만드는 데 문제가 있는지 궁금합니다. IE - 최고의 품질. 안드로이드가 dp 단위에 대한 표준 당보다 낮은 밀도로 이미지의 크기를 줄 이도록하십시오. 더 작은 화면을 그릴 때, Canvas 클래스를 사용하여 더 축소 할 수있었습니다. 반복적으로 실행되는 비싼 스케일링 계산을 피하기 위해 비트 맵을 다시 그릴 필요가있을 때마다 사용하기 위해 스케일 된 Bitmap 객체를 캐시 할 수 있습니다.

이렇게하는 데는 단점이 있습니까? 또는 동일한 이미지를 여러 복사본으로 만드는 것을 피하는 더 좋은 방법이 있습니까?

답변

0

작은 (로우 엔드) 장치에서 큰 이미지를 축소 할 때 성능이 저하됩니다. 이것이 눈에 띄는 지 여부는 표시해야하는 이미지의 수에 따라 다릅니다.
메모리에 대해서도 동일하게 적용됩니다.

+0

감사합니다. 좋은 의견입니다. 설명을위한 한 가지 점 : 축소 된 비트 맵을 캐싱하여 원래의 더 큰 이미지를 가비지 수집해야합니다. 이 일회성 GC 이벤트가이 특정 앱에 대한 영향을 줄만큼 충분히 충격적 일 것이라고는 생각하지 않습니다. 그러나 크기가 축소 된 캐시 된 Bitmap 인스턴스가 동일한 메모리 사용 공간인지, 아니면 Google의 대체 리소스 메소드를 사용하여 인스턴스화 한 경우보다 클 것입니까? (두 가지 방법 모두 동일한 물리적 차원의 비트 맵을 생성한다고 가정합니다.) 더 큰 경우 이는 저에게 문제가 될 수 있습니다. 감사! –

+0

좋은 질문입니다. 나는 당신이 다운 스케일 (downscale) 할 방법을 확신하지 못하기 때문에 최종 답을내는 것이 어렵다. (필자가 알고있는 한 :-)). 그래도 다음 (간접) 테스트를 할 수 있습니다 : 리소스에서 비트 맵을로드 한 후 isMutable()이 false를 반환한다고 가정합니다. 스케일링 후, 결과 비트 맵은 isMutable() = true를 나타내어 간접적으로 복사이고 따라서 자체 메모리를 가질 가능성이 있음을 나타냅니다. –

0

가장 높은 xhdpi 픽셀 밀도에 대해서만 비트 맵을 만든 다음 다른 화면 유형에서 테스트합니다.

일부 저밀도 화면에서 비트 맵이 잘못 표시되는 경우 해당 밀도에 맞게 비트 맵을 리메이크합니다. 그리고 이것은 매우 드물게 발생합니다 ...

또한 다른 화면 크기 (작은/xlarge)에 대한 특수 비트 맵을 만들 필요가 없습니다. ImageView를 더 작게/더 크게 만듭니다. 이미지 크기 조정은 느린 작업이 아닙니다. 대부분의 경우 비트 맵이 전체 화면을 덮지 않는 한 걱정할 필요가 없습니다.

관련 문제