我有一个大问题,我已经处理了好几天了。首先看一下需求是可以理解的。我将在下面的要点中尽可能简单地列出我的要求。
- 我有5部安卓手机。5个不同的品牌,不同的屏幕尺寸
- 想象一下,屏幕尺寸分别为4英寸、4.5英寸、5英寸、5.1英寸和5.2英寸
- 我有一个安卓应用程序,它有一个绘图画布
- 现在用
canvas.drawCircle(x / 2, y / 2, radius, paint)
画一个圆。假设半径为100(100像素?) - 我把这个应用程序安装在我最小的屏幕手机里,4英寸。然后我用尺子测量圆的直径。想象一下圆的直径是"精确"的3厘米
- 现在我在其他手机上安装了这个
- 不幸的是,在我的4.5英寸手机中,圆圈直径是3.2厘米。在5英寸手机中是3.3厘米。在5.1英寸手机中它是2.8厘米,以此类推
- 然而,我希望我的圆圈直径为3厘米(确切地说是3厘米)在每部手机
以上要求是我几天来一直在尝试的。我尝试了以下操作,以确保在所有屏幕上都能看到一个没有大小变化的圆圈。
-
使用
ImageView
-我尝试使用ImageView
并添加了一个圆形图像。我已经给宽度,高度固定。我尝试设置了px
、dp
、inches
等中的值。我还尝试了ImageView
可用的scalling
选项。还尝试将相同的图像放在drawable-nodpi
文件夹中。尝试创建所有大小的可绘制文件夹(例如:可绘制mdpi、可绘制hdpi)。所有这些都阻止了图像的缩放 - 使用画布-如上所述,我尝试使用画布并绘制图像。绘图按比例缩放
- 查找每英寸像素。-试着用程序找到每部手机的每英寸像素,我想我可以找到一种方法,从中开发一种逻辑,以动态绘制相同大小的图像。我使用了几个链接,包括-计算Android设备的PPI。他们中的大多数人只谈论获得屏幕分辨率
如何满足绘制相同大小圆的要求?如果可以通过了解PPI来实现,我应该如何实现?
以前的答案对我有用,但只要不适合你,我会尝试解释一些我认为会有帮助的事情。
我有一个密度为1(每英寸160像素)的设备,显示指标告诉我我有320*480像素,通过简单的计算,我应该知道我的移动宽度和高度,单位是英寸:320/160=2英寸表示宽度,480/160=3。现在一切都很好,直到我拿到尺子量了量,令人惊讶的是:我有一把1.65*2.48英寸的尺子!!。
然后我注意到每英寸屏幕上有一种叫做物理像素的东西,这让我松了一口气,你可以得到这样的结果:
getResources().getDisplayMetrics().xdpi; //for width physical dpi
getResources().getDisplayMetrics().ydpi; //for height physical dpi
现在我可以这样计算我的设备的物理宽度和高度:
我的宽度和高度的物理dpi都是193.5238,所以…
320/193.5238=1.65英寸宽480/193.5238=2.48英寸高
这是正确的!!。
现在回到你的问题,让我们获得任何手机的3厘米像素:
获取以厘米为单位的宽度:
宽度(厘米)=宽度(英寸)*2.54(因为1英寸等于2.54厘米)
获取每厘米的像素数量:
宽度(像素)/宽度(厘米)=的每厘米像素数(像素/厘米)
现在你想要一个3厘米,那么根据它的像素是:
3*数字=3cm像素
以上所有内容都可以这样缩短:
float devicePixelsWidth = getResources().getDisplayMetrics().widthPixels;
float deviceActualDpi = getResources().getDisplayMetrics().xdpi ;
float deviceActualInchWidth = devicePixelsWidth / deviceActualDpi ;
float deviceActualCMWidth = deviceActualInchWidth * 2.54f ;
float PixelsForActual3CM = devicePixelsWidth / deviceActualCMWidth * 3;
最后,以上所有内容都经过了我的测试和批准,具有与以前的回答方法相同的准确性:)
也许这不是答案,但可能有助于
float _100MmAsPx = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_MM,
100/*mm unit set*/, getResources().getDisplayMetrics());
上面给出了我在Nexus 5x和1889.7638 Nexus 5(模拟器)上的1661.5354。两者都有全高清显示屏,但5的显示屏尺寸分别为4.95英寸和5.2英寸。
这意味着100毫米在6上是1662像素,在5倍上是1890像素