2014-12-29 77 views
0

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

但我想要这个自定义组件在每个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); 
+0

是posX/Y int?如果是这样,在将它们转换为整数之前,尝试将它们和密度转换为浮点数。 –

+0

这并没有真正改变。蓝色框出现在不同设备的不同位置 –

回答

1

想想,你上传图片到您的个人资料和标记的人,其他人用不同的设备看你的照片应该会看到标记在完全相同的地方。

然后你不想放置“一个绝对的X,Y为所有Android设备”的视图。

例如,假设我们有两个设备,A和B.在设备A上,您的图像是一个小型手机,并且图像恰好以480像素高,270像素宽的大小渲染。用户轻敲的位置恰好是从顶部向下80个像素和从左侧至70个像素。

设备B的屏幕大小约为土耳其国家的大小。更具体地说,您的图像在纵向1600像素,900像素,mdpi屏幕密度下呈现,意味着图像高度为10,078,736,000像素,高达5,669,289,000像素宽。

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

假设您安排以相同长宽比显示图像,您需要保存标记来自某个角落的百分比。在这个例子中,顶部80像素是80/480或顶部〜16.7%,左边70像素是70/270或左边约25.9%。然后,您可以将百分比应用于其他设备上的图像大小,因此在土耳其大小的屏幕上显示标记〜16.7%,左侧〜25.9%。或在平板电脑上。或者在更大的手机上。或在电视上。或者你选择使用什么。

+0

感谢您的回答。我已经完成了真正的设备测试,但仍然存在问题。这些是计算: –

+0

我的imageview在宽度和高度上都是匹配父项。你可以看到,它现在正以某种方式:与密度1 设备:图像高度:996图像宽度:736 BLUEBOX POSY:473 - BlueBoxPOSX:119 重量%47.49 宽度%16.16 设备与1.5密度:图片身高:469图像宽度:432 BlueBox POSY:245 - BlueBox POSX:102 –

相关问题