Android - 在不同的设备上绘图

时间:2012-04-23 14:06:54

标签: android drawing android-canvas

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

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

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

2 个答案:

答案 0 :(得分: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值意味着与密度无关。

答案 1 :(得分: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。