화면의 크기를 조절해야하는 이미지가 있습니다. 이미지에는 텍스트가 포함되어있어 제 2 언어로 번역해야합니다. 따라서 각 이미지에 대해 각 언어에 대해 하나씩 두 가지 버전이 시작됩니다.Android 대안 드로어 블 리소스 줄이기
밀도 당 이미지 리소스가있는 것이 좋습니다. 그래서 나는 두 개의 이미지를 xhdpi, hdpi, mdpi, ldpi와 같이 4 배로 늘릴 것입니다. 그러나 구글은 화면 크기에 따라 다른 이미지 리소스를 사용한다고 말합니다. 그러면 이미지가 4 배로 확대됩니다 (크고 크고 평범하고 작음). 나는 모든 이미지의 32 사본을 만들고 싶지 않다!
xlarge 화면과 xhdpi 밀도 용 이미지를 만드는 데 문제가 있는지 궁금합니다. IE - 최고의 품질. 안드로이드가 dp 단위에 대한 표준 당보다 낮은 밀도로 이미지의 크기를 줄 이도록하십시오. 더 작은 화면을 그릴 때, Canvas 클래스를 사용하여 더 축소 할 수있었습니다. 반복적으로 실행되는 비싼 스케일링 계산을 피하기 위해 비트 맵을 다시 그릴 필요가있을 때마다 사용하기 위해 스케일 된 Bitmap 객체를 캐시 할 수 있습니다.
이렇게하는 데는 단점이 있습니까? 또는 동일한 이미지를 여러 복사본으로 만드는 것을 피하는 더 좋은 방법이 있습니까?
감사합니다. 좋은 의견입니다. 설명을위한 한 가지 점 : 축소 된 비트 맵을 캐싱하여 원래의 더 큰 이미지를 가비지 수집해야합니다. 이 일회성 GC 이벤트가이 특정 앱에 대한 영향을 줄만큼 충분히 충격적 일 것이라고는 생각하지 않습니다. 그러나 크기가 축소 된 캐시 된 Bitmap 인스턴스가 동일한 메모리 사용 공간인지, 아니면 Google의 대체 리소스 메소드를 사용하여 인스턴스화 한 경우보다 클 것입니까? (두 가지 방법 모두 동일한 물리적 차원의 비트 맵을 생성한다고 가정합니다.) 더 큰 경우 이는 저에게 문제가 될 수 있습니다. 감사! –
좋은 질문입니다. 나는 당신이 다운 스케일 (downscale) 할 방법을 확신하지 못하기 때문에 최종 답을내는 것이 어렵다. (필자가 알고있는 한 :-)). 그래도 다음 (간접) 테스트를 할 수 있습니다 : 리소스에서 비트 맵을로드 한 후 isMutable()이 false를 반환한다고 가정합니다. 스케일링 후, 결과 비트 맵은 isMutable() = true를 나타내어 간접적으로 복사이고 따라서 자체 메모리를 가질 가능성이 있음을 나타냅니다. –