Android图形:绘制相同大小的圆圈



我有一个大问题,我已经处理了好几天了。首先看一下需求是可以理解的。我将在下面的要点中尽可能简单地列出我的要求。

  1. 我有5部安卓手机。5个不同的品牌,不同的屏幕尺寸
  2. 想象一下,屏幕尺寸分别为4英寸、4.5英寸、5英寸、5.1英寸和5.2英寸
  3. 我有一个安卓应用程序,它有一个绘图画布
  4. 现在用canvas.drawCircle(x / 2, y / 2, radius, paint)画一个圆。假设半径为100(100像素?)
  5. 我把这个应用程序安装在我最小的屏幕手机里,4英寸。然后我用尺子测量圆的直径。想象一下圆的直径是"精确"的3厘米
  6. 现在我在其他手机上安装了这个
  7. 不幸的是,在我的4.5英寸手机中,圆圈直径是3.2厘米。在5英寸手机中是3.3厘米。在5.1英寸手机中它是2.8厘米,以此类推
  8. 然而,我希望我的圆圈直径为3厘米(确切地说是3厘米)在每部手机

以上要求是我几天来一直在尝试的。我尝试了以下操作,以确保在所有屏幕上都能看到一个没有大小变化的圆圈。

  1. 使用ImageView-我尝试使用ImageView并添加了一个圆形图像。我已经给宽度,高度固定。我尝试设置了pxdpinches等中的值。我还尝试了ImageView可用的scalling选项。还尝试将相同的图像放在drawable-nodpi文件夹中。尝试创建所有大小的可绘制文件夹(例如:可绘制mdpi、可绘制hdpi)。所有这些都阻止了图像的缩放
  2. 使用画布-如上所述,我尝试使用画布并绘制图像。绘图按比例缩放
  3. 查找每英寸像素。-试着用程序找到每部手机的每英寸像素,我想我可以找到一种方法,从中开发一种逻辑,以动态绘制相同大小的图像。我使用了几个链接,包括-计算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像素

相关内容

  • 没有找到相关文章

最新更新