android绘制到画布并设置dpi

时间:2016-03-25 18:14:23

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

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

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

我希望能够在屏幕上的任何位置绘制我的位图,并在所有设备尺寸上正确调整其比例,但我只是没有得到它。

以下是在两个仿真器上运行相同代码的示例屏幕截图。 enter image description here

绘图代码是相同的。通过添加比例,我能够让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。现在这只是我选择的一个数字,但它在小手机上走得太远了。

您还可以看到它们在一台设备上的距离非常远,但在第二台设备上却完全相同。

有什么可以解决这个问题?

1 个答案:

答案 0 :(得分:0)

  1. 您的图片似乎未在drawable文件夹中正确缩放。

    根据this帖子xxhdpi图片必须比ldpi图片大4倍,即 400x400px xxhdpi)和 100x100px ldpi)。

  2. 该行从(0,0)一直到(400,400)ldpi屏幕仅 240x320px ,因此右下角坐标为(240,320)。你看到的是完全正常的。