Android 如何使用ItemTouchHelper及其回调或实现自定义回调?
我注意到这些库,并渴望在我的应用程序中使用它们。 我的Android 如何使用ItemTouchHelper及其回调或实现自定义回调?,android,android-support-library,android-recyclerview,android-support-design,Android,Android Support Library,Android Recyclerview,Android Support Design,我注意到这些库,并渴望在我的应用程序中使用它们。 我的RecyclerView使用StaggedGridLayoutManager来组织ViewHolder,我写下了以下代码: ItemTouchHelper helper = new ItemTouchHelper(new ItemTouchHelper.SimpleCallback( ItemTouchHelper.UP | ItemTouchHelper.DOWN | ItemTouchHelper.START |
RecyclerView
使用StaggedGridLayoutManager
来组织ViewHolder
,我写下了以下代码:
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);
有两个问题:
deltaX
,滑动项目不会更改其alpha
RecyclerView
中有3个项目(有2列):
- 第一种是中等尺寸的李>
- 第二个比第一个小李>
- 第三个是最大的
RecyclerView
(其他项目不会影响前三个),然后向上滚动,第二个和第三个将完全相同
似乎我应该编写一个定制的ItemTouchHelper
来添加alpha
动画来解决第一个问题,而我没有正确使用这些类,因此导致了第二个问题
因此,使用
ItemTouchHelper
的最佳示例是什么?或者如何实现一个定制的?提前感谢您的回答或评论。根据ItemTouchHelper.Callback
中的评论,您希望覆盖那些dX、dY值的方法onchildraw
或onchildrawover
另请参见getDefaultUIUtil
和ItemTouchUIUtil
的实现(这就是onchildraw
和onchildrawover
调用的内容)。getDefaultUIUtil
的注释演示了如何将其与重写onchildraw
和onchildrawover
结合使用(即使示例错误地返回要处理的bool值)
如果要在棒棒糖中的默认标高上添加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;
}
谷歌搜索让我找到了这个答案:在哪里使用它们。@Armfoot很抱歉没有显示我以前真正需要的东西。我以前读过这个答案,知道如何使用SimpleCallback for ItemTouchHelper。然而,事实上,我想知道如何实现定制的ItemTouchHelper及其回调。再次抱歉。没问题,那么请编辑您的问题(标题和正文),并准确引用该问题“如何实现自定义ItemTouchHelper及其回调:如果您表明您已经对该主题进行了一些研究,并尝试自己对此做些什么,可能会有更多人提供帮助。@Armfoot感谢您的建议,我改进了我的问题。现在清楚了吗?我没有足够的声誉来展示任何图片,所以我尽可能准确地描述了我的问题。你的问题现在很清楚了,特别是你提供的例子会帮助我做得更好,做得很好!(upvted)棒棒糖的ItemTouchUIUtil已经做到了这一点,但不知何故,阴影并没有画出来:(