ImageView превосходит родительский Android Studio XML - PullRequest
0 голосов
/ 28 июня 2019

Как сделать, чтобы ребенок ImageView обрезал границы своего родителя? Когда я добавляю ImageView в качестве дочернего к родительскому представлению со скругленными углами, дочерний ImageView не соответствует закругленным углам.

Я пробовал:
android:cropToPadding
android:clipChildren
android:clipToPadding
android:adjustViewBounds

Я установил их в true и false в представлении изображения и представлении родителей, а также во всех возможных комбинациях.

У меня есть пользовательский вид: custom_view.xml для закругленных углов

<shape android:shape="rectangle">
  <corners android:backgroundTint="@color/backgroundColor" android:radius="10dp" />
  <solid android:color="@color/backgroundBlue" />
</shape>

enter image description here

У меня есть фрагмент, fragment_card.xml, который реализует пользовательское представление.

<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:id="@+id/card_view"
    android:layout_width="match_parent"
    android:layout_height="105dp"
    android:layout_margin="10dp"
    android:background="@drawable/custom_view"   <-- setting the custom_view
    app:cardBackgroundColor="@color/colorAccent"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent">

    <ImageView
        android:id="@+id/cardIconView"
        android:layout_width="105dp"
        android:layout_height="match_parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@id/line_separator"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
and it continues...

Дочерний ImageView не обрезает границы родительского представления с пользовательским фоном. Обратите внимание, что левые углы не закруглены

enter image description here

CardListAdapter:

override fun onBindViewHolder(holder: CardViewHolder, position: Int) { 
  holder.cardIconView.setImageDrawable(theimage)
}

Ответы [ 3 ]

1 голос
/ 28 июня 2019

Итак, в вашем вопросе происходит небольшое недоразумение.Первое, на что я хочу обратить внимание, это ваше предположение:

«Когда я добавляю ImageView как дочерний элемент к родительскому представлению со скругленными углами, дочерний ImageView не соответствует закругленным углам».

Ваш дочерний вид фактически соблюдает границы родительского представления.Закругленные углы не границы родительского элемента View, а отсечение рисованного элемента, который находится внутри View.То, что вы называете своим пользовательским представлением, файл custom_view.xml, на самом деле представляет собой пользовательский чертеж, который применяется в качестве фона для родителя.Он не влияет на границы ConstraintLayout.

Если вы хотите, чтобы ваше изображение также имело закругленные углы, я бы посоветовал вам найти учебник по вырезанию источника ImageView.Для поиска в Google можно найти несколько простых учебных пособий, в том числе один от Romain Guy, а также несколько на Medium, которые помогут вам.

Напомним: ваше дочернее представление на самом деле уважает границы родителя,фон, который вы применяете к представлению, на самом деле не является границей родительского элемента, а только рисуемым, чтобы выступать в качестве фона в пределах родительского представления.Таким образом, вам потребуется выполнить некоторый тип маскирования или обрезки изображения или создать собственный класс ImageView, который автоматически обрезает его содержимое.

0 голосов
/ 28 июня 2019

Вы можете создать еще один left_corner.xml и применить его к дочернему ImageView, попробуйте это:

    <shape android:shape="rectangle">
      <corners android:backgroundTint="@color/backgroundColor" android:bottomLeftRadius="10dp" android:topLeftRadius="10dp" android:bottomRightRadius="0dp" android:topRightRadius="0dp" />
      <solid android:color="@color/backgroundBlue" />
    </shape>

Надеюсь, это поможет.

0 голосов
/ 28 июня 2019

ImageView фактически соответствует установленным вами ограничениям.Это , потому что границы родительского элемента не меняются. Вот решение: включите поле для ImageView в сочетании с match_parent width a height, чтобы он соответствовал округленному родительскому элементу, оставляя немногограница в стороны.Играйте с размером поля (в dp), пока не получите то, что ищете.

...