Поддержание соотношения сторон фона для imageView - PullRequest
0 голосов
/ 10 января 2019

Я пытаюсь создать матрицу imageView, чтобы пользователь мог выбрать несколько изображений. Я загружаю изображения в виде «BackgroundResource» по двум причинам:

  1. Это был самый простой способ загрузить файлы jpg в класс java
  2. Когда изображение выбрано, я хотел дать пользователю некоторую обратную связь, добавив 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);
    }
}

Как мне сохранить соотношение в этой структуре?

самый простой способ - просто сделать все изображения одинаковыми по высоте и ширине? (добавив несколько прозрачных отступов по высоте или ширине)

1 Ответ

0 голосов
/ 10 января 2019

используйте этот макет XML, который я изменил из вашего. в привязке макета возникла проблема, которую вы можете связать. поэтому из-за привязки у вас возникнет проблема с макетом также удалите последнюю строку кода из активности. `

<?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"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <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:background="@drawable/blue_bg_shape"
        android:scaleType="fitXY"
        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="121dp"
        android:layout_height="120dp"
        android:layout_marginStart="1dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="1dp"
        android:background="@drawable/bird"
        android:scaleType="fitXY"
        app:layout_constraintEnd_toStartOf="@+id/img3"
        app:layout_constraintStart_toEndOf="@+id/img1"
        app:layout_constraintTop_toBottomOf="@+id/titleText" />

    <ImageView
        android:id="@+id/img3"
        android:layout_width="120dp"
        android:layout_height="120dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        android:background="@drawable/arrow_down_minimize_orange"
        android:scaleType="fitXY"
        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="1dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="1dp"
        android:background="@drawable/arrow_down_minimize_orange"
        android:scaleType="fitXY"
        app:layout_constraintEnd_toStartOf="@+id/img6"
        app:layout_constraintStart_toEndOf="@+id/img4"
        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"
        android:background="@drawable/arrow_down_minimize_orange"
        android:scaleType="fitXY"
        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"
        android:background="@drawable/arrow_down_minimize_orange"
        android:scaleType="fitXY"
        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="1dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="1dp"
        android:background="@drawable/arrow_down_minimize_orange"
        android:scaleType="fitXY"
        app:layout_constraintEnd_toStartOf="@+id/img9"
        app:layout_constraintStart_toEndOf="@+id/img7"
        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"
        android:background="@drawable/arrow_down_minimize_orange"
        android:scaleType="fitXY"
        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"
        android:background="@drawable/arrow_down_minimize_orange"
        android:scaleType="fitXY"
        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>

`

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...