在我的应用程序中,我创建了一个画布并在其上添加了一些位图。问题是对象正在添加触摸屏幕的原因。因此,在一个屏幕上,它们在中间出现在不同的屏幕上,但它们在像素中的位置是不同的。
我的意思是我有平板电脑和智能手机。当我触摸一个设备时,对象出现在两个设备上(多人游戏),但它不在同一个地方,因为它通过x和y传递位置。
如果有人理解我的意思,你能帮助我吗? 可能它在计算比率时必须有一些共同点。
答案 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。