2013-03-14 5 views
1

사용자 지정보기에서 특정 크기의 비트 맵을로드하려고합니다. 첫 번째 단계로 400px x 400px보기에서 400px x 400px 비트 맵을로드하려고했지만 비트 맵은 더 작은 크기로로드됩니다.사용자 지정보기 비트 맵의 ​​크기가 올바르지 않음

비슷한 문제가있는 일부 스레드를 발견했습니다. Options.inScale = false을 사용하는 것이 좋습니다. 나는 그것을 사용하고있어 더 나은 로그 메시지 (비트 맵 출력 정확한 크기 400 픽셀 X 400 픽셀)을,하지만 여전히 작은 렌더링 :

enter image description here

(노란색 사용자 정의보기의 배경이다 - 400 픽셀 X 400 픽셀, 및 빨간색은 비트 맵입니다.)

조언이 있으십니까? 여기 코드는 다음과 같습니다

사용자 정의보기 :

class TestView extends View { 
    private Bitmap bitmap; 
    private Paint paint = new Paint(); 

    public TestView(Context context) { 
     super(context); 
    } 

    public TestView(Context context, AttributeSet attr) { 
     super(context, attr); 

     BitmapFactory.Options options = new BitmapFactory.Options(); 
     options.inScaled = false; 

     bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.overlay, options).copy(Config.ARGB_8888, true); 
     Log.d("test6", "width: " + bitmap.getWidth() + " height: " + bitmap.getHeight()); 
    } 

    @Override 
    public void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     canvas.drawBitmap(bitmap, 0, 0, paint); 
    } 
} 

XML :

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="#000000" 
    > 
    <com.example.TestView 
     android:id="@+id/view" 
     android:layout_width="400px" 
     android:layout_height="400px" 
     android:background="#ffff00" 
     /> 
</RelativeLayout> 

비트 맵은 내가 스케일링을 사용할 필요가 없습니다 생각하는 그 이유는 ... 이미 400 픽셀 X 400 픽셀입니다 옵션 등이 있습니다.이 크기로 화면에 표시하고 싶습니다 ...

+0

왜 생성자에서 캔버스를 만들고 있습니까? 비트 맵을 그 자체로 드로잉하고 있습니까? 버그가 아니더라도 모든 것을 제거 할 수 있습니다. –

+0

맞아 - 이건 좀 복잡한 예제의 일부 야, 나는이 게시물을 위해 단순화 했어.하지만 코드의 일부는 여전히 거기에있다. 그것을 제거했습니다. – Ixx

+1

어떤 폴더에 비트 맵이 있습니까? 크기가 조절되지 않은 비트 맵은'drawable-nodpi' 폴더 여야합니다. 그렇지 않으면 문서가 관계없이 비트가 설정 되더라도 시스템에서 크기를 조정하는 경우가 있습니다. – DeeV

답변

2

폴더에없는 것이 가장 큰 이유는 크기가 커지는 이유입니다. . Canvas.drawBitmap의 문서에 따르면

: 비트 맵 캔버스는 다른 밀도있는 경우

,이 기능은 자동으로 캔버스와 같은 밀도로 그릴 비트 맵 스케일링 처리됩니다.

+0

+1 처음으로 이걸 필요로했을 때,'inScaled = false'는 기본적으로 쓸모가 없다는 것을 알기까지 몇 시간의 두통이 필요했습니다. – Geobits

+0

Ahhh ...이 폴더들 다시! 얼마 전부터 비슷한 문제가 있었지만 완전히 잊어 버렸습니다. 감사! – Ixx

관련 문제