gpt4 book ai didi

Android 在 Recyclerview 中使用 itemTouchHelper 在cardview上拖动海拔翻译z

转载 作者:行者123 更新时间:2023-11-29 23:29:34 25 4
gpt4 key购买 nike

我在弄清楚如何在拖动时暂时提升卡 View 时遇到问题。我使用带有cardViews的回收器 View ,这是我的itemtouchhelper:

class ListTouchHelper extends ItemTouchHelper.Callback {

private final ActionCompletionContract contract;

public ListTouchHelper(ActionCompletionContract contract) {
this.contract = contract;
}
@Override
public int getMovementFlags(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) {
int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN;
int swipeFlags = ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT;
return makeMovementFlags(dragFlags, swipeFlags);
}

@Override
public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
contract.onViewMoved(viewHolder.getAdapterPosition(), target.getAdapterPosition());
return true;
}

@Override
public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
if (direction == ItemTouchHelper.LEFT) {
contract.onViewSwipedLeft(viewHolder.getAdapterPosition());
} else if (direction == ItemTouchHelper.RIGHT) {
contract.onViewSwipedRight(viewHolder.getAdapterPosition());
}
}

public interface ActionCompletionContract {
void onViewMoved(int oldPosition, int newPosition);
void onViewSwipedLeft(int position);
void onViewSwipedRight(int position);
}
}


我已经设法暂时提升它:
enter image description here

结果是:(阴影以某种方式被剪掉了?)
enter image description here

但是,一旦 View 稍微移动,海拔就会消失:
enter image description here

我的问题是:拖动卡片时如何获取高度(包括阴影)?

提前致谢!

最佳答案

@LivinTheNoobLife 在您的解决方案中,您正在使用 ViewPropertyAnimator,但您没有为其设置任何翻译,因此不会应用任何动画。

这是我的解决方案,具有正常工作的 float 动画:

class DragHelper extends ItemTouchHelper.Callback {    
private boolean cardPicked = true;
private boolean reset = false;

@Override
public void onChildDraw(@NonNull Canvas c, @NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {

// elevate only when picked for the first time
if (cardPicked) {
ViewPropertyAnimator animator = viewHolder.itemView.animate();
animator.translationZ(16);
animator.setDuration(200);
animator.setInterpolator(new AccelerateDecelerateInterpolator());
animator.start();

cardPicked = false;
}

// when your item is not floating anymore
if (reset){
ViewPropertyAnimator animator = viewHolder.itemView.animate();

animator.translationZ(0);
animator.setDuration(200);
animator.setInterpolator(new AccelerateInterpolator());
animator.start();

cardPicked = true;
reset = false;
}
super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
}

// As the doc says
// Called by the ItemTouchHelper when the user interaction with an element is over and it also completed its animation.
@Override
public void clearView(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) {
super.clearView(recyclerView, viewHolder);

// interaction is over, time to reset our elevation
reset = true;
}
}

关于Android 在 Recyclerview 中使用 itemTouchHelper 在cardview上拖动海拔翻译z,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52872759/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com