2012-12-04 2 views
2

I가 그리기 같이 초기화있어 : 비트 맵잘못된 BitmapDrawable 치수

Drawable drawable = new BitmapDrawable(bitmap); 

치수 (X) (77) (50) (디버거 확인은,이 값은 필드 mWidth 및 mHeight 설정된다)이다.

하지만 드로어 블 사이즈는 33 x 51 크기로 초기화됩니다. 이유가 무엇입니까?

는 I의 값은 단지이 줄 이후 그리기 변수를 검사 :

mBitmapWidth = 33

mBitmapHeight = 51

그리고

drawable.getIntrinsicWidth(); 
drawable.getIntrinsicHeight(); 

도 33 X 51 반환

.

그러나 드로어 블에는 비트 맵 fi eld mBitmap, 올바른 크기는 50 x 77입니다. 그렇다면 드로어 블이 33 x 51로 초기화되는 이유는 무엇입니까? Drawable의 치수 DP (농도 의존적 ​​화소)에있는 반면 Bitmap

+1

를 사용

참고가 어떻게 든 화면 밀도와 관련이없는입니까? – fiddler

답변

3

치수 화소에있다. 귀하의 경우에는

는 디스플레이의 밀도는 아마 1.5 같은 것입니다 :

33분의 50 = 드로어 블 치수가 업데이트됩니다 = 1.5

주 51분의 77시 설정의 오류 밀도는 setTargetDensity 방법을 통해 달성된다.

+0

흠.하지만'getResources(). getDrawable (R.drawable.mydrawable) '로 인스턴스화 된 Drawable의 크기가 픽셀 단위 인 이유는 무엇입니까? (나는이 불일치 때문에 정확히이 문제를 겪고있다.) 그리고 문서에 그것도 아무것도 ... – Ixx

+0

좋은 질문입니다 ... 나는 drawable 차원이'setTargetDensity'를 통해 밀도를 설정할 때 업데이트된다는 것을 알아 냈습니다. 그래서'getResources(). getDrawable'는 그렇지 않습니다. 밀도를 – fiddler

+0

으로 설정하십시오. 양쪽 모두 옳다. 치수가 조정된다. private void computeBitmapSize() { mBitmapWidth = mBitmap.getScaledWidth (mTargetDensity); mBitmapHeight = mBitmap.getScaledHeight (mTargetDensity); }'감사합니다. – Ixx