【问题标题】:Custom view bitmap doesn't have correct size自定义视图位图的大小不正确
【发布时间】:2013-03-14 13:28:49
【问题描述】:

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

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

(黄色是自定义视图的背景 - 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 ...这就是为什么我认为我不必使用缩放选项等。我只想在屏幕上以这个大小显示它...

【问题讨论】:

  • 为什么要在构造函数中创建画布?您正在将位图绘制到自身上?这很奇怪,即使它不是错误 - 你可以删除所有这些。
  • 你是对的 - 这是一个更复杂示例的一部分,我为这篇文章简化了它......但部分代码仍然存在。删除它。
  • 位图在哪个文件夹?未缩放的位图应该是drawable-nodpi 文件夹。否则,系统有时会缩放它,即使该位已设置而与文档无关。
  • 我使用您的源代码创建了一个项目(只是没有选项,我使用 null 代替),并创建了一个 400 像素 x 400 像素的图像(纯红色),并测试了该项目,一切正常很好:/屏幕上没有黄色。

标签: android view bitmap


【解决方案1】:

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

根据Canvas.drawBitmap的文档:

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

【讨论】:

  • +1 第一次需要这个,头疼了好几个小时才发现inScaled=false基本没用。
  • 啊……又是这些文件夹!由于他们,我不久前遇到了类似的问题,但完全忘记了。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-18
  • 2016-12-25
  • 1970-01-01
  • 2019-05-02
  • 2012-09-05
  • 1970-01-01
相关资源
最近更新 更多