如何使ImageView显示在不同显示器上的相同位置?

时间:2015-05-29 10:20:55

标签: android android-imageview

蓝色矩形是不可见区域(对于调试而言是可见的)我点击并发生了一些事情。在IDE上,它们位于正确的位置。 fff

但是在genymotion(同一型号)上,他们被置于不同的位置 - 为什么?可能是什么问题 - 屏幕拒绝? qqq

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"
android:id="@+id/main">

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/background"
    android:src="@drawable/page_2_bkg"
    android:layout_alignParentTop="true" />

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/door_closed2"
    android:src="@drawable/page2_door_closed" />

<ImageView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/door_open2"
    android:src="@drawable/page2_door_opened"
    android:visibility="invisible" />

<ImageView
    android:layout_width="80dp"
    android:layout_height="300dp"
    android:id="@+id/boy"
    android:layout_marginLeft="160dp"
    android:visibility="visible"
    android:src="#ff2b16ff"
    android:layout_marginBottom="50dp" />

<ImageView
    android:layout_width="150dp"
    android:layout_height="300dp"
    android:id="@+id/doorBox"
    android:visibility="visible"
    android:layout_alignParentTop="true"
    android:layout_alignRight="@+id/background"
    android:layout_alignEnd="@+id/background"
    android:layout_marginRight="118dp"
    android:layout_marginEnd="118dp"
    android:src="#ffff3240" />

2 个答案:

答案 0 :(得分:1)

我发现您使用的是XML布局,在编辑之前,它不在原始问题中。无论如何,问题是矩形是相对于屏幕放置的,当它应该放在相对于图像时。

您可以通过执行以下操作来实现此效果:

  • 在屏幕布局中添加新的RelativeLayout(也恰好是RelativeLayout
  • 调整RelativeLayout的大小并重新定位到中心并使用全屏大小等。
  • 将新的RelativeLayout背景图片设为您的图片
  • 将您的矩形放在RelativeLayout内,并始终相对保持位置。这是relativeRelativeLayout的含义;)
  • 作为旁注,&#39; dp&#39;单位应考虑密度。

你要做的是让矩形在图像的前置部分,但是当你正在调整大小/移动图像时,矩形无法知道父母的尺寸预先部分&#39;图像(即使它不是真正的父母,这是问题的一部分)。通过使两个对象相对于父对象移动,您始终保持正确的位置。

答案 1 :(得分:0)

屏幕密度只是一种可能性,可能是其中一个原因。另一个可能是您将蓝色矩形与屏幕相关联,但您应该做的是将其与图像相关联。

屏幕密度稍微有点困难,因为2x密度屏幕上的100px只会移动矩形一半,所以不是使用像素,考虑使用百分比。这使得处理精神状态变得更加容易。

例如,看起来“门”矩形从图像宽度的75%变为图像宽度的90%。它大约是从顶部到图像高度的75%的高度的15%。

了解所有这些(伪代码示例):

  • DoorRectangle.left = Image.left +(Image.width * 0.75)
  • DoorRectangle.right = Image.left +(Image.width * 0.90)
  • DoorRectangle.top = Image.top +(Image.height * 0.15)
  • DoorRectangle.bottom = Image.top +(Image.height * 0.75)