我有一个主要问题,我现在正在工作几天。首先查看要求是很容易理解的。我将在下面的点表格中尽可能简单地列出我的要求。
canvas.drawCircle(x / 2, y / 2, radius, paint)
我画了一个圆圈。想象一下半径是100(100像素?)以上要求是我现在正在努力的事情。我尝试了以下操作以确保在所有屏幕上都没有更改尺寸的圆圈。
ImageView
- 我尝试使用ImageView
并添加了圆圈图片。我给出了宽度,高度固定。我试过在px
,dp
,inches
等设置值。我还尝试了scalling
ImageView
个可用选项。还尝试将相同的图像放在drawable-nodpi
文件夹中。尝试为所有尺寸创建可绘制文件夹(例如:drawable-mdpi,drawable-hdpi)。这不会阻止图像缩放。我如何满足绘制相同尺寸圆圈的要求?如果可以通过了解PPI来完成,我该怎么做?
答案 0 :(得分:1)
之前的答案对我有用,但只要它不适合你,我会尝试解释我认为有用的东西。
我的设备密度为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厘米的像素:
以cm为单位获取宽度:
宽度(cm)=宽度(英寸)* 2.54(因为1英寸等于2.54厘米)
获取每个cm中的像素数量:
宽度(以像素为单位)/宽度(cm)=每厘米像素宽度(px / cm)
现在你需要一个3厘米,然后根据它的像素是:
3 *数量= 3厘米像素
以上所有内容都可以缩短为:
float devicePixelsWidth = getResources().getDisplayMetrics().widthPixels;
float deviceActualDpi = getResources().getDisplayMetrics().xdpi ;
float deviceActualInchWidth = devicePixelsWidth / deviceActualDpi ;
float deviceActualCMWidth = deviceActualInchWidth * 2.54f ;
float PixelsForActual3CM = devicePixelsWidth / deviceActualCMWidth * 3;
最后,所有上述内容均经过我的测试和批准,并具有与之前的答案方法相同的准确度:)
答案 1 :(得分:0)
也许这不是答案,但可能会有所帮助
float _100MmAsPx = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_MM,
100/*mm unit set*/, getResources().getDisplayMetrics());
上面给出了Nexus 5x的1661.5354和Nexus 5的1889.7638(仿真器)。两者都有全高清显示屏,但5英寸显示为4.95英寸,而5英寸显示为5.2英寸。
这意味着100毫米是6,662和1690像素,5x