Canvas类绘制基元的Devide独立性

Pet*_*son 9 android

Android Canvas类支持一组丰富的绘图基元 - 圆形,线条等.我有一个应用程序,使用这些来绘制一些统计数据.

阅读http://developer.android.com/reference/android/graphics/Canvas.html#drawLine%28float,%20float,%20float,%20float,%20android.graphics.Paint%29上的说明 ...我不清楚坐标是什么单位或如何使它们与设备/分辨率无关.

这些是什么单位以及什么是绘制线条和圆形以及矩形的"最佳实践",它们适用于许多不同的屏幕尺寸和分辨率?提前致谢.

Via*_*huk 4

Android 文档说“位置和尺寸的单位是像素”。经过一段时间的实验,我发现在2.0版本之前,单位是像素。但从2.0开始,单位很可能是dip(与设备无关的像素)。

对于以下代码:

Paint paint = new Paint();
paint.setColor(Color.RED);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(0);
canvas.drawRect(new Rect(1, 1, 319, 319), paint);
Run Code Online (Sandbox Code Playgroud)

我在 Android 2.0+ 的 320x480、480x800 和 240x320 模拟器上得到与屏幕宽度相同大小的正方形。

这个发现让我解决了这个问题:大屏幕上的 1 像素垂直线有时是 2 像素宽。将描边宽度设置为 0 以绘制与屏幕尺寸无关的 1 像素线条。

编辑

在获得更多 Android 经验后,我需要纠正我的结论。实际上,AndroidManifest.xml 的“supports-screens”标签中有一个属性“android:anyDensity”。该属性默认为 true。当为 true 时,度量单位为 dp,否则为像素。