以dp为单位将“drawables”绘制到画布上

时间:2011-06-17 21:03:05

标签: java android pixel touchscreen

我正在试图弄清楚是否有一种方法可以用dp单位而不是像素来绘制到画布的位图。例如:以下代码将drawable缩放为100 * 100 px。我怎样才能改变它做100 * 100 dp?

int lengthPos = 10;
int heightPos = 10
mImage.setBounds(lengthPos, heightPos, (lengthPos + 100), (heightPos + 100));
mImage.draw(c);

此外,我不确定屏幕点击的测量单位是多少,但是它们与屏幕上的像素不匹配,这使得很难检测到何时选择了一个可绘制的(你有点猜不到单击选择一个drawable。我可以将点击坐标缩放到dp吗?看起来不会太难,特别是因为屏幕点击坐标存储在局部变量中以便在我的应用程序中处理。

换句话说,我需要匹配缩放,以便点击坐标250,250选择在多个屏幕密度上以250,250绘制的像素。

3 个答案:

答案 0 :(得分:6)

比率dp / dx等于您的设备dpi / 160,因此您可以通过这种方式轻松计算下降。

使用

DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
float density = dm.density

有关详情,请参阅参考资料:http://developer.android.com/reference/android/util/DisplayMetrics.html

答案 1 :(得分:2)

float dps = 100;
float pxs = dps * getResources().getDisplayMetrics().density;

Source (@Romain Guy)

答案 2 :(得分:1)

你不能直接,但你可以在px和dp之间转换。有关详细信息,请参阅此related StackOverflow post中的答案。