怎么在android中使用视图实现一个滑动删除效果

  介绍

这篇文章给大家介绍怎么在android中使用视图实现一个滑动删除效果,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

<强>实现功能

1,可以向左滑动,右侧出现删除
2,向左滑动如果删除出现一大半,松手打开删除,反之关闭删除
3,应用场景
,,,,,,,,,

<>强实现原理

1,外面是一个ListView
2条目是一个自定义控件继承ViewGroup
,,,1),左边一个TextView,右侧屏幕外也有一个TextView
,,,2),所以继承ViewGroup

<>强实现步骤

1,创建一个SlideDeleteView类

,,,1)。构造方法要关联

公共类SlideDelete延伸ViewGroup {
  
  私人观点leftView;
  私人观点rightView;
  私人ViewDragHelper助手;//第一步关联构造方法//第二步重写onMeasure和onLViewayout测量子视图和布局子视图
  公共SlideDelete(上下文语境){
  这(上下文,null);
  }
  
  公共SlideDelete(上下文语境,AttributeSet attrs) {
  这(上下文、attrs 0);
  }
  
  公共SlideDelete(上下文语境、AttributeSet attrs int defStyleAttr) {
  超级(上下文、attrs defStyleAttr);
  
  辅助=ViewDragHelper。创建(这个,回调);
  
  }
  }

2,在布局文件中设置SlideDeleteView里面的子视图

& lt; com.example.movedelete.SlideDelete   android: id=癅 + id/container"   android: layout_width=癿atch_parent"   android: layout_height=?0 dp"比;      & lt; TextView      android: id=癅 + id/content"   android: layout_width=癿atch_parent"   android: layout_height=癿atch_parent"   android:重力=癱enter"   android:背景=? 33000000“;   android:文本=暗?个条目”;   输入textColor=癮ndroid: # fff"   android: textSize=?0 sp"/比;   & lt; TextView      android: id=癅 + id/delete"   android: layout_width=?0 dp"   android: layout_height=癿atch_parent"   android:背景=? f00"   android:重力=癱enter"   android:文本=吧境?   输入textColor=癮ndroid: # fff"   android: textSize=?0 sp"/比;      & lt;/com.example.movedelete.SlideDelete>

3,重写onMeasure,给子视图进行测量

保护空白> @Override保护空白
  公共私人ViewDragHelper布尔>。回调函数回调=new ViewDragHelper.Callback () {//手势滑动时
  @Override
  公共布尔tryCaptureView(查看孩子,int pointerId) {
  返回true;
  }
//监听控件移动状态
  @Override
  公共空间>公共int clampViewPositionHorizontal(查看孩子,int, int dx) {//对左右越界问题的处理
  如果孩子==leftView) {//处理两边的越界问题
  如果(左祝辞=0){
  左=0;
  }else if(左& lt;=-rightView.getMeasuredWidth ()) {
  左=-rightView.getMeasuredWidth ();
  }
  }else if(孩子==rightView) {//只处理右边的越界问题,因为左侧越界的时看不到该视图
  如果(左& lt;=leftView.getMeasuredWidth ()——rightView.getMeasuredWidth ()) {
  左=leftView.getMeasuredWidth ()——rightView.getMeasuredWidth ();
  }else if(左祝辞=leftView.getMeasuredWidth ()) {
  左=leftView.getMeasuredWidth ();
  }
  
  
  }
  
  返回左;
  }

8手松开时重写onViewReleased方法,实现滑动手松开时,rightView是打开还是关闭

,,,1 .使用ViewDragHelper滑动时,要调用无效方法,回调computeScroll方法
,,,2 .重写computeScroll方法

,,,,,,,1)。先判断是否要继承滑动

,,,,,,,2)。使用兼容的无效方法来实现匀速滑动

 @Override
  公共空间>//设置删除的点击事件
  vh.delete.setOnClickListener(新View.OnClickListener () {
  @Override
  公共空间>包com.example.movedelete;
  
  进口android.content.Context;
  进口android.support.v4.view.ViewCompat;
  进口android.support.v4.widget.ViewDragHelper;
  进口android.util.AttributeSet;
  进口android.view.MotionEvent;
  进口android.view.View;
  进口android.view.ViewGroup;/* *
  *由刘桂新>包com.example.movedelete;
  
  进口android.os.Bundle;
  进口android.support.v7.app.AppCompatActivity;
  进口android.widget.ListView;
  
  进口com.example.movedelete.adapter.SlideDeleteAdapter;
  
  进口java.util.ArrayList;
  
  公开课MainActivity延伸AppCompatActivity {
  
  私人ListView lv;
  私人ArrayList列表;
  
  @Override
  保护空白>包com.example.movedelete.adapter;
  
  进口android.view.View;
  进口android.view.ViewGroup;
  进口android.widget.BaseAdapter;
  进口android.widget.TextView;
  
  进口com.example.movedelete.R;
  进口com.example.movedelete.SlideDelete;
  
  进口java.util.ArrayList;/* *
  *由刘桂新> & lt;及# 63;xml version=?.0”;编码=皍tf-8", # 63;比;
  http://schemas.android.com/apk/res/android" & lt; RelativeLayout xmlns: android=?;
  xmlns:工具=癶ttp://schemas.android.com/tools"
  android: id=癅 + id/activity_main"
  android: layout_width=癿atch_parent"
  android: layout_height=癿atch_parent"比;
  
  & lt;列表视图
  android: id=癅 + id/lv"
  android: layout_width=癿atch_parent"
  android: layout_height=癿atch_parent"比;
  
  & lt;/ListView>
  
  
  
  & lt;/RelativeLayout> 

怎么在android中使用视图实现一个滑动删除效果