我为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。现在这只是我选择的一个数字,但它在小手机上走得太远了。
您还可以看到它们在一台设备上的距离非常远,但在第二台设备上却完全相同。
有什么可以解决这个问题?
答案 0 :(得分:0)
您的图片似乎未在drawable
文件夹中正确缩放。
根据this帖子xxhdpi
图片必须比ldpi
图片大4倍,即 400x400px (xxhdpi
)和 100x100px (ldpi
)。
该行从(0,0)一直到(400,400)。 ldpi
屏幕仅 240x320px ,因此右下角坐标为(240,320)。你看到的是完全正常的。