android - 为 Canvas 类绘图基元提供独立性

标签 android

Android Canvas 类支持一组丰富的绘图原语 - 圆圈、直线等。我有一个应用程序使用这些来绘制一些统计数据。

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

这些单位是什么?绘制适用于多种不同屏幕尺寸和分辨率的直线、圆形和矩形的“最佳实践”是什么?提前致谢。

最佳答案

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

对于下面的代码:

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);

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

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

编辑

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

关于android - 为 Canvas 类绘图基元提供独立性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4908486/

相关文章:

Android文本过度放大文本大小

android - OSRM后端返回距离:0

java - R.字符串比较

android - 如何在 Google Maps Android API 实用程序库中刷新热图图层的点?

像页脚一样的 Android 选项卡

java - Android 线程因未知原因停止

android - 从 Activity 调用 fragment 方法时出现空指针异常

javascript - React 导航不变性违规

android - Instagram 风格的安卓布局?

android - 将位图重力设置为底部离开奥利奥中的屏幕图层列表