我注意到这些库并且急于在我的应用中使用它们。
我的RecyclerView
使用StaggeredGridLayoutManager
来整理viewHolders
,并且我已写下以下代码:
ItemTouchHelper helper = new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(
ItemTouchHelper.UP | ItemTouchHelper.DOWN | ItemTouchHelper.START | ItemTouchHelper.END,
ItemTouchHelper.START | ItemTouchHelper.END) {
@Override
public boolean onMove(RecyclerView recyclerView,
RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
mAdapter.move(viewHolder.getAdapterPosition(), target.getAdapterPosition());
return true;
}
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
mAdapter.remove(viewHolder.getAdapterPosition());
}
});
helper.attachToRecyclerView(mRecyclerView);
有两个问题:
点击某个项目不会将alpha
更改为deltaX
。
想象一下RecyclerView
中有3个项目(有2列):
如果我将第三个移动到第一个位置,请向下滚动RecyclerView
(其他项目不会影响前三个)然后向上,第二个和第三个将完全同样的。
似乎我应该编写一个自定义ItemTouchHelper
来添加alpha
动画来解决第一个问题,并且我没有正确使用这些类,从而导致第二个问题。
因此,使用ItemTouchHelper
的最佳样本是什么?或者如何实现定制的?提前感谢您的任何答案或评论。
答案 0 :(得分:2)
根据ItemTouchHelper.Callback
中的评论,您希望为这些dX,dY值覆盖方法onChildDraw
或onChildDrawOver
。
另请参阅getDefaultUIUtil
以及ItemTouchUIUtil
的实施(onChildDraw
和onChildDrawOver
调用的内容)。 getDefaultUIUtil
的评论演示了如何将其与覆盖onChildDraw
和onChildDrawOver
结合使用(即使示例错误地返回bool值进行处理)。
如果您想在Lollipop中添加5到默认高程,这是一个快速示例:
@Override
public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {
super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
if (Build.VERSION.SDK_INT >= 21 && isCurrentlyActive && !isElevated) {
final float newElevation = 5f + ViewCompat.getElevation(viewHolder.itemView);
ViewCompat.setElevation(viewHolder.itemView, newElevation);
isElevated = true;
}
}
@Override
public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
super.clearView(recyclerView, viewHolder);
isElevated = false;
}