【问题标题】:android drawing to canvas and setting dpiandroid绘图到画布并设置dpi
【发布时间】:2016-03-25 18:14:22
【问题描述】:

我为 ldpi 到 xxxhdpi 创建了一些测试资产,并将它们放在相应的可绘制文件夹中。如果我在屏幕的角落画东西说位置 0,0 or 0+canvas.getWidth()-bitmap.getWidth()

或类似的东西它们在所有设备屏幕上正确对齐。

我希望能够在屏幕上的任何位置绘制我的位图,并在所有设备尺寸上正确调整它们的比例,但我就是不明白。

这是在两个模拟器上运行的相同代码的示例屏幕截图。

绘图代码相同。通过添加比例,我能够让 Paint 正确缩放线条。位图也相对于它们的屏幕尺寸进行缩放,但我如何在代码中以 50 个单位进行绘制并使其在所有设备上都是 50 个单位?

初始化函数

Paint p = new Paint();
p.setColor(Color.RED);
p.setStyle(Paint.Style.FILL_AND_STROKE);
float scale = context.getResources().getDisplayMetrics().density;
p.setStrokeWidth(40*scale);

Bitmap ball = BitmapFactory.decodeResource(context.getResources(), R.drawable.ball);

渲染功能

canvas.drawLine(0, 0, 400, 400, p);
canvas.drawBitmap(ball, 50, 50, null);
canvas.drawBitmap(ball2, 150, 150, null);

从上面的屏幕截图中,您可以看到两个错误。线的长度,它是 400px 长。现在这只是我选择的一个数字,但在较小的手机上它走得太远了。

您还可以看到它们在一台设备上相距甚远,但在第二台设备上却彼此重叠。

什么可以解决这个问题?

【问题讨论】:

    标签: android android-canvas scale android-drawable android-bitmap


    【解决方案1】:
    1. 您的图像在 drawable 文件夹中的缩放比例似乎不正确。

      根据this 发布xxhdpi 图像必须比ldpi 图像大4 倍,即400x400px (xxhdpi) 和100x100px (ldpi )。

    2. 这条线从 (0,0) 一直延伸到 (400, 400)ldpi 屏幕只有240x320px,所以右下角坐标为(240, 320)。你看到的完全正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-29
      • 1970-01-01
      • 1970-01-01
      • 2012-02-02
      • 2013-04-10
      相关资源
      最近更新 更多