繁体   English   中英

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

[英]Placing a view to exact same place for all android devices

我的任务是允许用户上传图像,并允许用户在他单击的任何位置放置自定义视图。 (就像在Facebook上标记照片一样),这很简单,只需获取触摸位置并将其动态添加到相对布局中,然后设置leftMargin和topMargin。

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

例如; 假设您将图片上传到个人资料中并为某人添加了标签,那么其他使用不同设备查看您的图片的人应该在相对于图片的完全相同的位置看到标签。

我知道我也必须考虑屏幕密度,但是不知道该如何操作x,y。

看一下示例屏幕截图:(蓝色框由用户单击放置)

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

(图片已更新:)

密度为1的设备

密度为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);

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

然后,您不想放置“所有android设备的绝对X,Y视图”。

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

设备B的屏幕大约等于土耳其国家/地区的大小。 更具体地说,您的图像是在-mdpi屏幕密度上以纵向方向以1600 km x 900 km渲染的,这表示图像的高度约为10,078,736,000像素,宽为5,669,289,000像素。

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

假设您安排以相同的宽高比显示图像,则将需要保存标记从某个角所占的百分比 在此示例中,从顶部开始的80个像素为顶部的80/48080/480 %,从左侧开始的70个像素为左侧的70/27070/270 %。 然后,您可以将百分比应用于另一台设备上的图像大小,从而在土耳其尺寸的屏幕上从顶部显示〜16.7%,从左侧显示〜25.9%。 或在平板电脑上。 或在较大的电话上。 或在电视上。 或在您选择使用的任何东西上。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM