将视图放置到所有Android设备的完全相同的位置

时间:2014-12-29 16:27:34

标签: android android-layout imageview dpi

我的任务是允许用户上传图片,并允许用户在他点击的任何地方放置自定义视图。 (就像在Facebook上分类图片一样)通过获取触摸位置并动态地将视图添加到相对布局并设置leftMargin和topMargin,这很简单。

但我希望这个自定义组件能够在每个Android设备的“完全”相同位置绘制。

例如;认为您已将图片上传到您的个人资料并标记某人,其他使用不同设备查看您的图片的人应该看到该图片与图片完全相同的位置。

我知道我必须考虑屏幕密度,但不知道如何根据它操纵x,y。

查看示例屏幕截图: (用户点击蓝色框)

此屏幕截图来自屏幕密度为1的测试设备,另一个密度为1.5的设备显示位于不同位置的蓝色框。

(图片更新:)

Device with density 1

Device with density 1,5

这是一个测试代码:

            icon = new ImageView(getActivity());
            icon.setBackgroundColor(getResources().getColor(R.color.blue));
            RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(30, 40);
            int density = this.getResources().getDisplayMetrics().density;
            params.leftMargin = (int)(posX/density);
            params.topMargin = (int)(posY/density);

1 个答案:

答案 0 :(得分:1)

  

认为您已将图片上传到自己的个人资料中并标记某人,其他使用不同设备查看图片的人应该在完全相同的位置看到该标记。

然后你不想将“视图放在所有Android设备的绝对X,Y”。

例如,假设我们有两个设备,A和B.在设备A上,您的图像是一个小型手机,图像恰好以480像素高,270像素宽的尺寸呈现。用户点击的位置恰好是从顶部向下80像素,从左侧向下70像素。

设备B的屏幕大小与土耳其相当。更具体地说,您的图像在-mdpi屏幕密度上以1600km到900km呈现,纵向,这意味着图像高约10,078,736,000像素,宽5,669,289,000像素。

您不希望将标记从顶部向下放置80像素,从左侧向下放置70像素。这将使标记几乎位于左上角。

假设您安排以相同的宽高比显示图像,则需要保存标记来自某个角落的百分比。在此示例中,从顶部开始的80个像素是80/480或从顶部开始的约16.7%,从左侧开始的70个像素是70/270或从左侧开始的约25.9%。然后,您可以将百分比应用到另一台设备上的图像大小,因此在土耳其大小的屏幕上显示您的标记从顶部开始约为16.7%,从左侧显示约25.9%。或者在平板电脑上。或者在更大的手机上。或者在电视上播放。或者无论你选择使用什么。