Хорошо, так что я решил, вроде.Я думаю, что по какой-то другой причине он не работает по умолчанию, однако мне удалось написать обходной путь.
private boolean first = true; //first draw of cardView?
private boolean last = false; //last draw of cardView?
@Override
public void onChildDraw(@NonNull Canvas c, @NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {
//add elevation on first draw
if (first) {
ViewPropertyAnimator animator = viewHolder.itemView.animate();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { //consider SDK version
viewHolder.itemView.setTranslationZ(7);
animator.start();
}
first = false;
}
//remove translationZ in last edit
if (last) {
ViewPropertyAnimator animator = viewHolder.itemView.animate();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { //consider SDK version
viewHolder.itemView.setTranslationZ(0);
animator.start();
}
//reset values
last=false;
first=true;
}
super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
}
@Override
public void clearView(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) {
super.clearView(recyclerView, viewHolder);
last = true; //only one more OnChildDrawWillBeCalled
}
Приведенный выше код добавлен в ваш ItemTouchHelper.Callback, и все должно работать.Основная идея состоит в том, чтобы вручную контролировать рисование перевода.Для этого я выясняю, когда рисуется первый холст, а когда последний, тогда как канкас будет показывать тень.
Еще один комментарий: ViewPropertyAnimator в сочетании с файлом макета xml невероятноне интуитивно понятный и глючный, поэтому, если вы можете избежать этого, я бы порекомендовал сделать это, и вместо этого попытался бы программно анимировать изменения и эффекты представления.
Надеюсь, это кому-нибудь поможет.