仿QQ聊天Listview横向拖动删除等操作
来源:互联网 发布:如何学好c语言 编辑:程序博客网 时间:2024/05/23 18:48
最近朋友要我帮忙,做像QQ那样横向拉动显示删除的按钮做操作。
思路:写一个Item的容器,比屏幕宽度宽按钮的宽度(自定义),当时横向拉动的时候请求父控件不拦截触摸事件。下面直接上原代码,代码中注释详细,请看代码。
import android.content.Context;import android.graphics.Canvas;import android.util.AttributeSet;import android.view.MotionEvent;import android.widget.LinearLayout;/** * Created by 小辉 on 2017/3/21. * @des: * 此控件为LinearLayout加长型,加长的长度为原来的1/4,所以控件可分5份, * 控件设置为match_parent,那这边的4份为显示,剩余的一份超出屏幕为隐藏 * 滑动效果已经监听,可按手指滑动来显示隐藏部分。 */public class ItemView extends LinearLayout{ private int width;//控件的宽度 private int height;//控件的高度 private boolean needShowItem=true;//删除键是否显示true没显示,需要显示 private float x,down_X,count;//x为控件移动前的位置,count为移动的距离 public ItemView(Context context, AttributeSet attrs) { super(context, attrs); } public ItemView(Context context) { this(context,null); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); width = MeasureSpec.getSize(widthMeasureSpec);//计算出来的宽高 height = MeasureSpec.getSize(heightMeasureSpec); setMeasuredDimension((width*5/4), height);//加长宽度四分之一(可以自定义长度) x=getX(); } @Override public boolean onTouchEvent(MotionEvent event) {// getParent().requestDisallowInterceptTouchEvent(true); int action = event.getAction(); float my_width=getWidth();//这是加宽1/4后的长度 switch (action){ case MotionEvent.ACTION_DOWN: down_X=event.getX();//点击下去的坐标 break; case MotionEvent.ACTION_MOVE: count=event.getX()-down_X;//移动的距离 if(count>5||count<-5){ //横向滑动 定义为5摸索出来的 getParent().requestDisallowInterceptTouchEvent(true); //当不显示删除的时候,只响应往左拉,也就是count<0 if(needShowItem&&count<0){ if(count<(-my_width/5)){ //超出控件位置,防止拉出空白 setX(x + (-my_width/5)); }else{ setX(x + count); } } //当显示删除的时候,只响应往右拉,也就是count>0 if(!needShowItem&&count>0){ if(count>my_width/5){ //超出控件位置,防止拉出空白 setX(x + my_width/5); }else { setX(x + count); } } } break; case MotionEvent.ACTION_UP: if(needShowItem){// 删除未显示状态,拉出超过一半删除控件的位置,则显示删除 if(count<(-my_width/10)){ //往左偏移1/5的宽度,拉出删除 setX(x-(my_width/5)); x=getX(); //已显示状态,改变需要显示状态为false needShowItem=false; }else{ //拉出距离不够删除控件一半位置 ,回到原来的位置 setX(x); } }else { if(count>(my_width/10)){ setX(x+(my_width/5)); x=getX(); //删除键消失,改变需要显示状态为true needShowItem=true; }else{ setX(x); } } getParent().requestDisallowInterceptTouchEvent(false); break; } return true; } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); }}
请尊重他人成果,复制内容请注明出处!
忘记教你们使用了,这个就是一个容易view,继承LinearLayout,直接当做一个LinearLayout使用就可以了,宽度为权重分布。以此view为例,这控件为5份,屏幕显示部分为4份,多余一份可以做功能按钮(删除或者其他),多余的一份是隐藏在屏幕右边,触摸时间已经完成,直接在Adapter里面做隐藏按钮的点击事件就OK了!
0 0
- 仿QQ聊天Listview横向拖动删除等操作
- ListView仿QQ群聊天
- 仿QQ消息列表item横向滑动删除ListView中item侧滑删除
- 仿qq横向滑动删除的 SwipeMenuListView
- Android仿QQ和iOS的ListView左滑出现删除和置顶等操作,可自定义菜单
- Android开发仿QQ聊天滑动listview
- 仿QQ小红点未读消息拖动删除
- 仿qq聊天及定位等
- 自定义listview 实现仿qq聊天列表左滑删除效果
- Android 仿QQ首页ListView左滑置顶、删除等实现源码
- ListView滑动删除 ,仿腾讯QQ
- ListView滑动删除 ,仿腾讯QQ
- 简单ListView仿QQ左滑删除
- ListView滑动删除 ,仿腾讯QQ
- 仿qq的listView 滑动删除
- ListView滑动删除 ,仿腾讯QQ
- ListView滑动删除 ,仿腾讯QQ
- ListView滑动删除 ,仿腾讯QQ
- QT学习之设置界面风格
- 安装xdebug时发现的一些问题
- Python标准库——collections模块的Counter类
- 世界最早提出微循环理论者:赵炳文与修瑞娟
- 『 Spark 』10. spark 应用程序性能优化|12 个优化方法
- 仿QQ聊天Listview横向拖动删除等操作
- jquery+Jcrop+servlet图片上传裁剪选择保存实例
- easyui datagrid 动态修改查询参数
- ElasticSearch实战
- Hibernate七部曲(五)一对多关系映射
- linux系统下(x86_64)安装jdk 1.6(jdk-6u45-linux-x64.bin)
- .net redis demo
- redis 充当消息队列
- 文件上传下载