2

在我的应用程序中,我创建了一个画布并在其上添加了一些位图。问题是对象添加了为什么触摸屏幕。所以在一个屏幕上,它们出现在不同的中间,但它们的像素位置不同。

我的意思是我有平板电脑和智能手机。当我触摸一个对象时,对象会出现在两个设备(多人游戏)上,但它不在同一个地方,因为它通过 x 和 y 传递了位置。

如果有人明白我的意思,你能帮助我吗?可能它必须与计算比率有一些共同点。

4

2 回答 2

2

我猜您遇到的问题是屏幕分辨率不同,并且您正在传递像素数据。您将需要使用 dp 值并在发送它们之前将 dp 转换为像素值。在接收设备上,您需要将发送回给定设备上的像素值转换为 dp。使用以下方法进行转换。

将 DP 转换为像素:

    final float scale = getResources().getDisplayMetrics().density;
    int pixelValue = (int) (DESIRED_DP_VALUE * scale + 0.5f);

要将像素转换为 DP:

    final float scale = getResources().getDisplayMetrics().density;
    int dpValue = (int) ((DESIRED_PIXEL_VALUE) - 0.5f / scale);

对 getDisplayMetrics().density 的调用将为您提供基于当前设备的比例值。dp 值意味着与密度无关。

于 2012-04-23T14:34:20.257 回答
0

您如何定义指标?如果您使用像素,请使用与密度无关的解决方案:

public int GetDipsFromPixel(float pixels)
{
   // Get the screen's density scale
   final float scale = getResources().getDisplayMetrics().density;
   // Convert the dps to pixels, based on density scale
   return (int) (pixels * scale + 0.5f);
} 

并在你的课堂上像这样使用它:

 textView.setHeight(GetDipsFromPixel(50));

这样,两个设备上的 textview 的高度将是相同的 dps,即使它们的分辨率不同。

于 2012-04-23T14:29:20.237 回答