将x和y坐标从一个Android设备转换到另一个设备,与分辨率无关。

4

我在我的应用程序中有一个画布,当用户在上面绘图时,保存所有的坐标。然后将保存的坐标转换到另一个设备上,并尝试绘制像素。

例如: (20,30), (50,40) .. .. ..

由于屏幕大小和分辨率不同,我的绘图是不完整的,位置和绘制的图像不正确。

如何将坐标映射到另一个设备,以便其位置与实际绘制图像的设备完全相同?


你好,我们找到这个问题的解决方案了吗? - lil'ms
2个回答

8

当你保存坐标时,需要通过将坐标除以屏幕密度来获取绘图中的设备无关像素,当你在设备上绘制时,需要通过将坐标乘以设备密度来绘制。例如:

float density = getContext().getResources().getDisplayMetrics().density;
canvas.drawText(text, 
        xPos * density,
        yPos * density,
        mPaint);

请问您能否解释一下如何在实际绘图发生的设备中保存坐标,并如何在任何其他设备中恢复该点? - Shanij P.S
这听起来像是一个与你所问的无关的广泛问题。我建议你在服务器上保存绘图状态,并让其他设备从服务器检索它。如果你只想连接两个本地设备,那么我建议使用蓝牙。无论哪种方式,这都不是一个简单的任务。 - Steven Trigg
我知道如何保存文件,但我需要在保存和恢复过程中进行数学计算。 - Shanij P.S

1
尝试实现密度无关像素(dp)。
密度无关像素等同于在160 dpi屏幕上的一个物理像素。
将dp单位转换为屏幕像素很简单: px = dp * (dpi / 160)。
因此,首先确定您的设备dpi(每像素点)。 要移动到(20, 30)。 确定x = 20 *(dpi / 160); y = 30 *(dpi / 160);
移动到(x, y)。
您可以使用getResources().getDisplayMetrics().density获得dpi。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接