Как я могу сопоставить высоту ImageView с его родителем, который является wrap_content? (RecyclerView Item) - PullRequest
0 голосов
/ 19 февраля 2020

У меня есть RecyclerView предмет с LinearLayout. Высота LinearLayout установлена ​​на wrap_content. Внутри этого LinearLayout я хотел бы иметь ImageView с треугольной формой, соответствующей высоте LinearLayout, чтобы получить что-то вроде этого:

enter image description here

С фиксированной высотой для LinearLayout я могу просто установить ее в XML:

 <ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:scaleType="fitXY"
        android:adjustViewBounds="true"/>

Чтобы получить тот же результат с переменной высотой, я попытался установить ImageView высота и ширина до 0, а затем программно настроить их внутри onBindViewHolder:

holder.mLinearLayout.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
int layoutHeight = holder.mLinearLayout.getMeasuredHeight();

holder.mImageView.getLayoutParams().height = layoutHeight;
holder.mImageView.getLayoutParams().width = layoutHeight;

holder.mImageView.requestLayout();

Похоже, изменение размера ImageView работает, но не показывает изображение. Что я тут не так делаю?

1 Ответ

0 голосов
/ 19 февраля 2020

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

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

holder.mLinearLayout.measure(
                View.MeasureSpec.makeMeasureSpec(Resources.getSystem().getDisplayMetrics().widthPixels, View.MeasureSpec.EXACTLY),
                View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)
        );

Я не уверен, если это лучшее решение, но оно работает.

...