2011-02-16 10 views
3

두 개의 비트 맵을 사용하여 사용자 정의보기를 만들었습니다. 이미지 뷰에서 비트 맵을 내보기 외부에서 사용할 때 이미지는 괜찮습니다. setDensity(240) (hdpi 장치)에 전화해야하지만 괜찮습니다. 그러나 사용자 정의보기에서 동일한 비트 맵을 캔버스에 그릴 때 onDraw(Canvas) 오버라이드 된 메서드에서는 setDensity(240)을 호출하지 않을 때와 같은 방식으로 다시 크기가 조절됩니다. 디버깅을 통해 호출 한 후 캔버스와 비트 맵의 ​​밀도가 240이되도록했습니다.캔버스에 비트 맵 그리기

코드 : 내보기의 외부

@Override 
protected void onDraw(Canvas canvas) {  
    _ingredient.setDensity(240); 
    canvas.setDensity(240); 
    canvas.drawBitmap(_ingredient, new Matrix(), new Paint()); 
    Matrix refMatrix = new Matrix(); 
    refMatrix.postTranslate(0, _ingredient.getHeight()-35); 
    Paint paint = new Paint(); 
    paint.setAlpha(60); 
} 

작업 이미지 뷰.

Bitmap tertr = _cocktail.getCocktailBitmapImage(); 
tertr.setDensity(240); 
ImageView in = new ImageView(this); 
in.setScaleType(ScaleType.CENTER); 
in.setImageBitmap(tertr); 
RelativeLayout relativeLayout = RelativeLayout)findViewById(R.id.cocktail_date_image_layout); 
LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT); 
relativeLayout.addView(in, params); 

첫 번째 것은 setDensity 호출없이 두 번째 이미지와 마찬가지로 확대 된 이미지를 보여줍니다. 이미지는 72dpi로 생성되었습니다. 이 이미지는 제공되며 변경할 수 없습니다. 나는 한 가지를 놓치고 있습니까, 아니면 캔버스가 어떻게 작동합니까? 테스트에 사용 된 장치는 DROID2입니다.

답변

3

나는이 문제를 해결했다. 문제를 일으킨 코드 스 니펫이 매니페스트 파일에 있습니다. <supports-screens android:anyDensity="false"/>가 true로 변경되었습니다. True가 기본값이지만 불행히도 다른 접근 방식을 시도하는 동안이를 변경했습니다. 새로운 가치와 setDensity() 메소드를 사용하면 효과가 있습니다.

+0

이 답변입니까? 그렇다면 @ boulder의 답변이 더 일반적이라고 생각하지 않는다면 허용 된 것으로 표시 할 수 있습니다. – Benjol

+0

나는했다. 그러나 나는 20 시간을 기다려야했다. :) – gmate

1

비트 맵 밀도는 그려지는 화면 밀도가 아니라 비트 맵의 ​​"원래"밀도입니다. 즉, 비트 맵과 화면 밀도가 일치하는 경우 비트 맵의 ​​크기가 조정되지 않습니다. 픽셀 단위의 이미지를 같은 크기로 만들려면 비트 맵 밀도를 160으로 설정해야합니다. 희망이 도움이 될 것입니다.

또한 캔버스 밀도를 수정하면 안된다고 생각합니다.

+0

160의 가치가 어땠는지 설명해 주시겠습니까? 코드에서 볼 수 있듯이 화면의 밀도와 일치하도록 비트 맵 밀도를 설정합니다. – gmate

+0

160dpi는 기본 Android 밀도입니다. 비트 맵 밀도를 160으로 설정하고 화면 밀도가 240이면 비트 맵이 확대됩니다. 비트 맵 밀도를 240으로 설정하면 240dpi 장치에서는 크기가 조정되지 않지만 160dpi 장치에서는 크기가 작아집니다. –

+0

게다가, 당신은 비트 맵을 어디서 구합니까? 리소스 또는 다른 소스 (네트워크)에서 가져오고 있습니까? –