Я пытаюсь создать матрицу imageView
, чтобы пользователь мог выбрать несколько изображений.
Я загружаю изображения в виде «BackgroundResource» по двум причинам:
- Это был самый простой способ загрузить файлы jpg в класс java
- Когда изображение выбрано, я хотел дать пользователю некоторую обратную связь, добавив src на фоне, и дал мне возможность добавить проверенный знак.
Единственная проблема заключается в том, что поддерживать фоновое соотношение изображения сложнее. Все мои изображения представляют собой файлы jpg, и я хочу, чтобы изображение на заднем плане имело размер 120dpX120dp , но сохраняло соотношение сторон,
Что я попробовал:
- Изменение
ScaleType
из ImageView
- добавить
RelativeLayout
вокруг ImageView
это мой макет:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".LockScreenActivity">
<TextView
android:id="@+id/titleText"
android:layout_width="270dp"
android:layout_height="50dp"
android:layout_marginTop="16dp"
android:text="Select 3 images"
android:textAlignment="center"
android:textSize="36sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.504"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/img1"
android:layout_width="120dp"
android:layout_height="120dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:scaleType="centerCrop"
app:layout_constraintEnd_toStartOf="@+id/img2"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/titleText" />
<ImageView
android:id="@+id/img2"
android:layout_width="120dp"
android:layout_height="120dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/titleText"
app:layout_constraintVertical_bias="0.0" />
<ImageView
android:id="@+id/img3"
android:layout_width="120dp"
android:layout_height="120dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/img2"
app:layout_constraintTop_toBottomOf="@+id/titleText" />
<ImageView
android:id="@+id/img5"
android:layout_width="120dp"
android:layout_height="120dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:scaleType="centerInside"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/img2" />
<ImageView
android:id="@+id/img6"
android:layout_width="120dp"
android:layout_height="120dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/img5"
app:layout_constraintTop_toBottomOf="@+id/img3" />
<ImageView
android:id="@+id/img7"
android:layout_width="120dp"
android:layout_height="120dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
app:layout_constraintEnd_toStartOf="@+id/img8"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/img4" />
<ImageView
android:id="@+id/img8"
android:layout_width="120dp"
android:layout_height="120dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/img5" />
<ImageView
android:id="@+id/img9"
android:layout_width="120dp"
android:layout_height="120dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/img8"
app:layout_constraintTop_toBottomOf="@+id/img6" />
<ImageView
android:id="@+id/img4"
android:layout_width="120dp"
android:layout_height="120dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
app:layout_constraintEnd_toStartOf="@+id/img5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/img1" />
<Button
android:id="@+id/submit"
android:layout_width="76dp"
android:layout_height="45dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="50dp"
android:layout_marginBottom="8dp"
android:text="OK"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/img8"
app:layout_constraintVertical_bias="0.673" />
<Button
android:id="@+id/backBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="50dp"
android:layout_marginEnd="8dp"
android:text="Back"
app:layout_constraintBaseline_toBaselineOf="@+id/submit"
app:layout_constraintEnd_toStartOf="@+id/submit"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent" />
</android.support.constraint.ConstraintLayout>
Это мой java-код для установки imageBackground
- все мои фоновые изображения имеют формат «img» + i -> i в диапазоне (1, numOfImages):
private void updateImageView(ArrayList<String> images) {
for (int i = 1; i <= images.size(); i++) {
int drawableResourceId =
this.getResources().getIdentifier(images.get(i-1), "drawable",
this.getPackageName());
int id = getResources().getIdentifier("img" +i, "id",
this.getPackageName());
ImageView img = findViewById(id);
img.setBackgroundResource(drawableResourceId);
img.setTag(images.get(i-1));
img.setImageResource(android.R.color.transparent);
}
}
Как мне сохранить соотношение в этой структуре?
самый простой способ - просто сделать все изображения одинаковыми по высоте и ширине? (добавив несколько прозрачных отступов по высоте или ширине)