介绍
这篇文章给大家介绍怎么在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中使用视图实现一个滑动删除效果