ImageView всегда центрируется в ConstraintLayout - PullRequest
0 голосов
/ 19 декабря 2018

Все еще изучаю ConstraintView, поэтому я надеюсь, что упускаю что-то очевидное.Вот проблема:

Я хочу, чтобы ImageView расширялся или сжимался до максимально возможного размера, сохраняя его соотношение сторон.Важно, чтобы изображение не было обрезано.

И еще одним важным моментом является то, что оно поднимается до верхней части ConstraintLayout, а ширина по центру меньше высоты.

Вот код макета:

<?xml version="1.0" encoding="utf-8"?>

<ImageView
    android:id="@+id/imageView2"
    android:layout_width="0dp"
    android:layout_height="0dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    android:adjustViewBounds="true"
    app:srcCompat="@drawable/evil_kitten" />

<Button
    android:id="@+id/go_btn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_margin="8dp"
    android:text="Go Kitty!"
    app:layout_constraintBottom_toBottomOf="@+id/imageView2"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent" />

Но я получаю изображение, которое всегда центрируется как по вертикали, так и по горизонтали, что создает нежелательные отступы сверху.(Граница ConstraintLayout выделена желтым цветом):

Изображение расширяется и сжимается правильно, чтобы быть максимально большим, сохраняя при этом соотношение сторон,Но как я могу прикрепить это к вершине?

Ответы [ 3 ]

0 голосов
/ 19 декабря 2018

Не устанавливайте для layout_height значение match_parent, а затем используйте layout_constrainedHeight, чтобы ограничить высоту, чтобы она не выходила за пределы макета ограничения.

Идея состоит в том, чтобы поиграть с макетом представления изображения относительно родителя, а не думатьизменить масштабирование внутри 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=".MainActivity">

   <ImageView
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:src="@drawable/test2"
      app:layout_constrainedHeight="true" />
</android.support.constraint.ConstraintLayout>
0 голосов
/ 20 декабря 2018

Используйте этот макет.app:layout_constraintVertical_bias будет держать ImageView закрепленным наверху, а android:adjustViewBounds будет регулировать размеры ImageView в соответствии с размером изображения.

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <ImageView
        android:id="@+id/image_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" 
        android:src="@drawable/image"
        android:adjustViewBounds="true"
        app:layout_constraintVertical_bias="0.0"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent" 
        app:layout_constraintBottom_toTopOf="@id/button"/>

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:layout_marginBottom="8dp"
        android:text="Go Kitty!"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"/>

</android.support.constraint.ConstraintLayout>
0 голосов
/ 19 декабря 2018

Я просто попытался сделать то же самое, что и вы, и не смог воспроизвести ошибку, но я все равно поделюсь кодом макета, чтобы вы могли сравнить:

<?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=".MainActivity">

<ImageView android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/cat"/>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="bottom">

    <Button android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:layout_marginStart="100dp"
        android:layout_marginEnd="100dp"
        android:text="Button"/>

</LinearLayout>


</android.support.constraint.ConstraintLayout>

Результат есть наAndroid 8.0: result building in release mode on android 8.0

...