Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何使用ItemTouchHelper及其回调或实现自定义回调?_Android_Android Support Library_Android Recyclerview_Android Support Design - Fatal编程技术网

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已经做到了这一点,但不知何故,阴影并没有画出来:(