侧滑删除

本文介绍了一种在Android应用中实现列表项滑动删除的方法。通过监听手指滑动事件,利用scrollTo方法使列表项右侧的删除按钮可见,并实现了点击删除按钮后的数据移除逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实现效果

点击删除按钮:

   mAdapter.setOnRightItemClickListener(new SwipeAdapter.onRightItemClickListener() {

            @Override
            public void onRightItemClick(View v, int position) {
                data.remove(position);
                mListView.setAdapter(mAdapter);
                Toast.makeText(MainActivity.this, "删除成功", Toast.LENGTH_SHORT).show();
            }
        });

 mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Toast.makeText(MainActivity.this, "item onclick " + position, Toast.LENGTH_SHORT).show();
            }
        });

核心代码

 case MotionEvent.ACTION_MOVE:
                float dx = lastX - mFirstX;
                float dy = lastY - mFirstY;

                //确定滑动方向
                if (mIsHorizontal == null) {
                    if (!judgeScrollDirection(dx, dy)) {
                        break;
                    }
                }
                //情况二:一个Item的右边布局已经显示,这时候左右滑动另外一个item,那个右边布局显示的item隐藏其右边布局
                if (mIsHorizontal) {
                    if (mIsShown && mPreItemView != mCurrentItemView) {
                        hiddenRight(mPreItemView);
                    }

                    if (mIsShown && mPreItemView == mCurrentItemView) {
                        dx = dx - mRightViewWidth;
                    }

                    // 不能超过边界mRightViewWidth,scrollTo(x,0),向左移动为正,向右移动为负
                    if (dx < 0 && dx > -mRightViewWidth) {
                        mCurrentItemView.scrollTo((int) (-dx), 0);
                    }

                    return true;
                } else {
                    //情况三:一个Item的右边布局已经显示,这时候上下滚动ListView,那么那个右边布局显示的item隐藏其右边布局
                    if (mIsShown) {
                        hiddenRight(mPreItemView);
                    }
                }

                    break;

item的左滑和右滑是通过scrollTo(x,0)来实现的,向左移动x为正,向右移动x为负

dx为移动的距离

  // 不能超过边界mRightViewWidth,scrollTo(x,0),向左移动为正,向右移动为负
  if (dx < 0 && dx > -mRightViewWidth) {
        mCurrentItemView.scrollTo((int) (-dx), 0);
   }

引用blog地址:http://www.xuebuyuan.com/2013505.html

图上面,褐色的框,其实就是我们眼睛看到的手机界面,就是一个窗口。

而绿色的长方体呢,就是一块可以左右拉动的幕布啦,其实也就是我们要显示在窗口上面的内容,它其实是可以很大的,大到无限大,只是没在窗口中间的,所以我们就看不到。

第二幅图是向右滑的情况:对应的是scrollTo(-100,0);

第三幅图是向左滑的情况:对应的是scrollTo(100,0);

图示:

隐藏右边View触发存在几种情况

情况一:一个Item的右边布局已经显示,这时候点击任意一个item, 那么那个右边布局显示的item隐藏其右边布局

情况二:一个Item的右边布局已经显示,这时候左右滑动另外一个item,那个右边布局显示的item隐藏其右边布局

 情况三:一个Item的右边布局已经显示,这时候上下滚动ListView,那么那个右边布局显示的item隐藏其右边布局

  情况四:一个Item的右边布局已经显示,这时候左右滑动当前一个item,那个右边布局显示的item隐藏其右边布局

  情况五:向左滑动一个item,且滑动的距离小于了右边View的宽度的一半,隐藏之。

参照http://blog.youkuaiyun.com/o279642707/article/details/51571060优化

代码下载:点击打开链接


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值