я не знаю, если этот подход является лучшим, но у меня есть следующая проблема:Установка высота CardView программно
Я хочу элемент списка (а CardView) в RecyclerView анимировать, когда это кнопка была нажата, так что эта кнопка, некоторые другие виды внутри этого элемента и фон CardView меняются.
Я не буду ловить animateChange из пользовательского RecyclerView.ItemAnimator: (до сих пор анимация просто замирание определяется в XML с помощью animateLayoutChanges)
public boolean animateChange(@NonNull RecyclerView.ViewHolder oldHolder, @NonNull RecyclerView.ViewHolder newHolder, @NonNull ItemHolderInfo preLayoutInfo, @NonNull ItemHolderInfo postLayoutInfo) {
Log.d("Animation", "Test");
final MyAdapter.MyViewHolder viewHolder = (MyAdapter.MyViewHolder) newHolder;
viewHolder.mButtons.setVisibility(View.GONE);
viewHolder.mHints.setVisibility(View.GONE);
viewHolder.mImageView.setVisibility(View.GONE);
ViewGroup.LayoutParams layoutParams = viewHolder.containerCardView.getLayoutParams();
layoutParams.height = 192;
viewHolder.containerCardView.setLayoutParams(layoutParams);
viewHolder.containerCardView.setBackgroundResource(R.drawable.some_background);
viewHolder.containerCardView.setElevation(20f);
return true;
}
Как вы можете видеть, я устанавливаю фона вручную в animateChange. Все работает нормально (или позволяет сказать, по крайней мере, как ожидалось), за исключением высоты карты. Я попытался установить высоту вручную, но нет показанной отметки.
EDIT______
Мой CardView имеет ImageView и кнопку внутри него. При нажатии кнопки сама кнопка и изображение должны исчезать, и на правой стороне картыView должна быть красная линия. Я пытался добиться того, чтобы при установке фона (с setBackgroundResource) к этому:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:angle="180"
android:centerColor="@android:color/transparent"
android:centerX="0.1"
android:startColor="@android:color/holo_red_dark"/>
<corners
android:bottomLeftRadius="2dip"
android:bottomRightRadius="2dip"
android:topLeftRadius="2dip"
android:topRightRadius="2dip"/>
</shape>
</item>
<item android:right="4dp">
<shape android:shape="rectangle">
<solid android:color="@android:color/white" />
</shape>
</item>
</layer-list>
Что просто XML вытяжка с красной линией справа. У вас есть предложения по другому способу приблизиться к моей цели?
'Я попытался установить высоту вручную, но нет показанного показа.« Что ты имеешь в виду? –
viewHolder.containerCardView.setElevation (20f); Перед тем, как я установил новый фон, cardView имеет высоту раньше, но не. Поэтому я попытался установить его снова с помощью этой строки кода. – Vancore
Почему бы вам просто не установить его в XML? –