我想使用getLocationOnScreen
来获取ImageView的位置,然后我想将另一个ImageView准确地放在那个地方。
假设它们都处于相同的布局中。当应用启动时,只有imgv1
可见。用户可以移动和旋转该图像。然后,用户可以按下按钮,第二张图像imgv2
应该正好放在imgv1
的顶部,以便覆盖它。 imgv1
和imgv2
都具有相同的尺寸。
例如,假设我有imgv1
和imgv2
:
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>
答案 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
放入同一FrameLayout
,android: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层叠在一起,并显示出来。