自定义视图位图的大小不正确

时间:2013-03-14 13:28:49

标签: android view bitmap

我想在自定义视图中加载具有特定大小的位图。作为第一步,我想在400px x 400px视图中加载400px x 400px位图......但是位图加载的尺寸更小。

我找到了一些类似问题的主题。建议使用Options.inScale = false。我使用它,并得到更好的日志消息(位图输出正确的大小400px x 400px),但它仍然渲染得更小:

enter image description here

(黄色是自定义视图的背景 - 400px x 400px,红色是位图)。

有什么建议吗?这是代码:

自定义视图:

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>

位图已经是400px x 400px ...这就是为什么我认为我不必使用缩放选项等等。我只想在屏幕上以这个尺寸显示...

1 个答案:

答案 0 :(得分:2)

您的Bitmap很可能不在drawable-nodpi文件夹中,这就是缩放的原因。

根据Canvas.drawBitmap的文件:

  

如果位图和画布具有不同的密度,则此函数将自动缩放位图,以与画布相同的密度进行绘制。