首页 > 代码库 > 模仿QQ左滑删除

模仿QQ左滑删除

需求:

1.左滑删除

2.向左滑动距离超过一半的时候让它自动滑开,向右滑动超过一半的时候自动隐藏

3.一次只允许滑开一个item

还有,根本不需要自定义view来实现,谨防入坑

布局:

<?xml version="1.0" encoding="utf-8"?><HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android"    android:id="@+id/scrollView"    android:layout_width="match_parent"    android:layout_height="100dp"    android:scrollbars="none">    <LinearLayout        android:layout_width="wrap_content"        android:layout_height="match_parent"        android:orientation="horizontal">        <LinearLayout            android:id="@+id/browse_record_layout"            android:layout_width="match_parent"            android:layout_height="match_parent"            android:orientation="horizontal">            <ImageView                android:id="@+id/browse_record_image"                android:layout_width="128dp"                android:layout_height="78dp"                android:layout_marginBottom="10dp"                android:layout_marginLeft="10dp"                android:layout_marginTop="10dp"                android:scaleType="centerCrop"                android:src="@drawable/banner_zhibo" />            <TextView                android:id="@+id/browse_record_title"                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:layout_marginLeft="10dp"                android:layout_marginRight="15dp"                android:layout_marginTop="10dp"                android:layout_toRightOf="@id/browse_record_image"                android:ellipsize="end"                android:includeFontPadding="false"                android:lineSpacingExtra="0dp"                android:lines="2"                android:text="空中读书会"                android:textColor="@color/c32"                android:textSize="15sp" />        </LinearLayout>        <TextView            android:id="@+id/browse_delete"            android:layout_width="65dp"            android:layout_height="match_parent"            android:background="@color/red"            android:gravity="center"            android:text="删除"            android:textColor="@color/white"            android:textSize="16sp" />    </LinearLayout></HorizontalScrollView>

 

adapter的getview中:

//隐藏删除按钮ViewGroup.LayoutParams params = holder.browse_record_layout.getLayoutParams();int screenW = ((Activity) context).getWindowManager().getDefaultDisplay().getWidth();params.width = screenW;//自动滑开和自动隐藏效果holder.scrollView.setOnTouchListener(new View.OnTouchListener() {    @Override    public boolean onTouch(View v, MotionEvent event) {        switch (event.getAction()) {            case MotionEvent.ACTION_UP:                // 手抬起的时候判断滑动距离                int slideDistance = holder.scrollView.getScrollX();// 获取向左滑动的距离,是一个非负数,px                int delete = holder.browse_delete.getWidth();// 删除按钮的宽度,单位px                // 当滑动距离大于删除按钮宽度的一半时,就自动滑动到最左边,完全显示删除按钮,所谓的最左边就是滑动距离等于删除按钮宽度                // 当滑动距离小于删除按钮宽度的一半时,就隐藏删除按钮,即滑动距离等于0的位置                if (slideDistance >= delete / 2) {                    holder.scrollView.scrollTo(delete, 0);                    currentSlideView = holder.scrollView;// 保存当前滑开的item                } else {                    holder.scrollView.scrollTo(0, 0);                    currentSlideView = null;// 清空                }                break;            case MotionEvent.ACTION_MOVE:                // 滑动的时候判断当前有没有其它滑开的item,有的话就隐藏                if (currentSlideView != holder.scrollView) {                    autoHide();                }                break;            default:                break;        }        return true;    }});//删除holder.browse_delete.setOnClickListener(new View.OnClickListener() {    @Override    public void onClick(View v) {        //删除一条记录        list.remove(position);        autoHide();        notifyDataSetChanged();    }});

 

模仿QQ左滑删除