Android: размещение ImageView в точном месте на экране - PullRequest
0 голосов
/ 10 мая 2018

Я хотел бы использовать 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>

Ответы [ 3 ]

0 голосов
/ 10 мая 2018

Если у меня перекрывающиеся виды, я обычно помещаю их в макет и показываю / скрываю их. Однако, если вы хотите изменить размер кода, попробуйте установить параметры макета второго изображения, например:

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

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

... как то так. Позиционирование во многом зависит от родителя представлений изображений. Относительный макет будет правильным выбором.

0 голосов
/ 10 мая 2018

Шаг # 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 (или эквивалентный ресурс) для наложения двух рисованных элементов друг на друга и показать это.

0 голосов
/ 10 мая 2018

Javadoc для просмотра говорит, что setX и setY будут смещать изображение от его исходного местоположения. Похоже, вы хотите использовать setLeft и setTop.

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

...