3

문서 here에 따르면 PNG 리소스는 BitmapDrawable으로 변환되어야합니다.Android-png 리소스가 Android 4.0의 ColorDrawable로 변환되었습니다.

: 나는 검은 색으로 만 픽셀 거기에이있는 PNG 파일 때문에 ClassCastException의 충돌에서 발생되는 이상한 행동을 관찰 해요 그러나 나는 사용자 정의보기의 생성자에서 다음을 수행하려고하면 ( InvocationTargetException에 싸여)
 
    ... 
    tempDrawable = typedArr.getDrawable(R.styleable.CustomView_src); // Source points to a png file 
    Log.i("TestPNGToResource", "Canonical Class Name " + tempDrawable.getClass().getCanonicalName()); 
    tempBitmap = ((BitmapDrawable) tempDrawable).getBitmap(); 
    ... 
내가 안드로이드 2.2에 로그인 한 다음 참조

2.3

 
09-24 13:21:37.575: I/TestPNGToResource(532): Canonical Class Name android.graphics.drawable.ColorDrawable 

이유는 자원이 BitmapDrawable로 변환되고 있지?

+0

png에 색이있는 픽셀이있는 경우에도 여전히 발생하고 있습니까? 'aapt'의 png 최적화가 단색 이미지를 실제로 ColorDrawable로 변환 할 수 있는지 또는 사용자 정의 속성을 해결하는 동안 오류가있는 경우 확실하지 않습니다. – zapl

+0

컬러 픽셀이있는 이미지에서는 발생하지 않습니다. 맞춤 속성에 오류가 발생하면 모든 기기에서 오류가 발생한 것입니다. 4.3을 실행하는 Nexus 4에서 예상대로 작동합니다. – 500865

답변

3

이것은 aapt가 수행하는 최적화입니다. 단일 색상으로 만들어진 이미지를 인식하여 비트 맵 대신 단색으로 바꿀 수 있습니다. 이것은 공간 효율적이며 로딩 시간을 향상시킵니다.

+2

기록을 위해,이 행동을 무효로하는 어떤 방법이 있느냐, 아니면 코드에서 그것을 검사 할 필요가 있는가? – Geobits

+0

http://developer.android.com/guide/topics/resources/drawable-resource.html#Bitmap 여기에있는 문서에 따르면 Drawable을 BitmapDrawable로 캐스팅하고 있는데,이 경우 충돌이 발생합니다. ColorDrawable로 변환됩니다. – 500865

+1

설명서가 잘못되어 업데이트해야합니다. @Geobits : 코드에서 확인해야 할 것이다. –

0

9 패치 이미지에서는 발생하지 않는다고 가정합니다. 맞습니까? 또한 이미지 파일을 사용할 때 apk 파일의 압축을 풀면 여전히 이미지 파일이 표시됩니다.

어쨌든, 난 그 도움이된다면 모르겠지만,이 값 확인하는 것을 시도했다 : 그것은 색상 유형을의 경우, 다음

TypedValue value = a.peekValue(R.styleable.CustomView_src); 

을,이 색상으로 자신의 당김을 만들 수 있습니다 . 문제는 그것이 당신이 얻는 것이라면 크기를 얻는 방법입니다.

그러나 특별한 경우에 참조 유형을 얻은 경우 BitmapFactory.decodeResource()을 사용하여 비트 맵을 만듦으로써 BitmapDrawable이되도록 할 수 있습니다.

+0

일반적으로 나는이 일을하지 않을 것이지만 내 질문에는 아주 작은 견해가 있고 나는 그것을 어떻게 할 수 있는지 모른다. 그래서이 [질문] (http://stackoverflow.com/questions/)을 볼 수있을 것이다. 35729545/reflection-in-background-android) 제발? 나는 그것을 정말로 고맙게 생각할 것이다 – Dan

관련 문제