Android:将ImageView放在屏幕上的确切位置

时间:2018-05-09 23:44:05

标签: android imageview location

我想使用getLocationOnScreen来获取ImageView的位置,然后我想将另一个ImageView准确地放在那个地方。

假设它们都处于相同的布局中。当应用启动时,只有imgv1可见。用户可以移动和旋转该图像。然后,用户可以按下按钮,第二张图像imgv2应该正好放在imgv1的顶部,以便覆盖它。 imgv1imgv2都具有相同的尺寸。

例如,假设我有imgv1imgv2

ImageView imgv1, imgv2;

int[] img_coordinates = new int[2];
imgv1.getLocationOnScreen(img_coordinates);

我想使用类似的东西:

imgv2.setX(img_coordinates[0]);
imgv2.setY(img_coordinates[2]);

但这并不是我需要做的,而是将imgv2的左上角放在imgv1的左上角。

帮助我这样做的任何其他方法也很好。

**更新**

这是我的布局:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/tools_root"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent">

<ImageView
    android:id="@+id/imgv1"
    android:layout_width="300dp"
    android:layout_height="200dp"
    android:layout_gravity="center_vertical|center_horizontal"
    android:visibility="gone"
    app:cameraCropOutput="true"
    app:cameraPlaySounds="false" />

<ImageView
    android:id="@+id/imgv2"
    android:layout_width="300dp"
    android:layout_height="200dp"
    android:adjustViewBounds="true"
    android:scaleType="fitXY"
    android:visibility="gone" />

</FrameLayout>

3 个答案:

答案 0 :(得分:0)

javadoc for view表示setX和setY将偏移图像的原始位置。看起来你想要使用的是setLeft和setTop。

https://developer.android.com/reference/android/view/View#setleft

答案 1 :(得分:0)

如果我有重叠的视图,我通常将它们放在布局中并显示/隐藏它们。但是,如果您想通过代码进行dit尝试设置第二个图像的布局参数,如:

lp.addRule(RelativeLayout.ALIGN_LEFT,image1.getId());

lp.addRule(RelativeLayout.ALIGN_TOP,image1.getId());

......类似的东西。 定位很大程度上取决于Image视图的父级。相对布局是正确的选择。

答案 2 :(得分:0)

第1步:将imgv1放入FrameLayout

第2步:将imgv2放入同一FrameLayoutandroid:visibility="gone"

步骤3:当用户按下按钮时,请致电imgv2.setVisibility(View.VISIBLE)

<FrameLayout android:id="combined">
  <ImageView android:id="imgv1" android:layout_width="match_parent" android:layout_height="match_parent" />
  <ImageView android:id="imgv2" android:visibility="gone" android:layout_width="match_parent" android:layout_height="match_parent"  />
</FrameLayout>

缺少FrameLayout的大小/定位规则,这可能是您目前用于imgv1的起始条件的任何内容。

或者,有一个ImageView而不是两个,并在按钮点击上更改图像。例如,您可以使用LayerDrawable(或等效资源)将两个drawable层叠在一起,并显示出来。