【Android】解决Listview侧滑与上下滑动问题+侧滑通用布局 DragRelativeLayout
来源:互联网 发布:融合交换机软件下载 编辑:程序博客网 时间:2024/05/29 11:32
今天抽空想自己写个仿QQ的列表项侧滑删除,重写完 item的onTouchEvent(),测试发现一个问题,item侧滑时,同时上下滑动,listview的触摸监听就会覆盖item,导致抬起手指动作item里面的监听无法执行,布局乱掉了。
解决问题办法:判断左右滑动,左右滑动时禁止listview上下滑动
代码:
// 判断是否为偏向左右的滑动 if (Math.abs(nowX - mDownX) > Math.abs(nowY - mDownY)) { // 左右滑动请求消费该事件,防止上下滑动以及被ScrollView嵌套的手势冲突 requestDisallowInterceptTouchEvent(true);}
下面是item布局,直接放到xml最外层就行
package com.xxx.myapplication.widget;import android.content.Context;import android.util.AttributeSet;import android.util.Log;import android.view.MotionEvent;import android.view.View;import android.widget.RelativeLayout;/** * 横向拖拽布局(延伸:侧滑删除) * Created by lixiao on 2016/11/3 0003. */public class DragRelativeLayout extends RelativeLayout { public DragRelativeLayout(Context context, AttributeSet attrs) { super(context, attrs); } public DragRelativeLayout(Context context) { super(context); } int top; int mDownX; int mDownY; View pointChild; RelativeLayout.LayoutParams params; @Override public boolean onTouchEvent(MotionEvent event) { switch(event.getAction()) { case MotionEvent.ACTION_DOWN: mDownX =(int)event.getRawX(); mDownY =(int)event.getRawY();// pointChild = getChildAt(0);// params= (RelativeLayout.LayoutParams) pointChild.getLayoutParams(); pointChild = this; top=pointChild.getTop(); Log.i("TAG", "DOWN: mDownX "+ mDownX); Log.i("TAG", "DOWN: mDownY "+ mDownY); break; case MotionEvent.ACTION_MOVE: int nowX = (int) event.getRawX(); int nowY = (int) event.getRawY(); int dx= (int) (mDownX -event.getRawX()); int dy= (int) (mDownY -event.getRawY()); // 判断是否为偏向左右的滑动 if (Math.abs(nowX - mDownX) > Math.abs(nowY - mDownY)) { // 左右滑动请求消费该事件,防止上下滑动以及被ScrollView嵌套的手势冲突 requestDisallowInterceptTouchEvent(true); Log.i("TAG", "ACTION_MOVE: dx " + dx); int right = 0 + pointChild.getWidth() - dx; int bottom = top + pointChild.getHeight(); pointChild.layout(0 - dx, top, right, bottom);// params.leftMargin = -dx;// pointChild.setLayoutParams(params); return true; } break; case MotionEvent.ACTION_UP:// Log.i("TAG", "ACTION_UP: width "+v.getWidth());// Log.i("TAG", "ACTION_UP: height "+v.getHeight()); pointChild.layout(0, top,0+pointChild.getWidth() , top+pointChild.getHeight());// params.leftMargin = 0;// pointChild.setLayoutParams(params); break; } return super.onTouchEvent(event); }}
现在只做了左右滑动的效果,侧滑删除还没实现,不过也应该蛮简单了,加个删除回调接口就行了
0 0
- 【Android】解决Listview侧滑与上下滑动问题+侧滑通用布局 DragRelativeLayout
- Android ListView上下滑动与item左右滑动冲突解决
- 仿QQ侧滑删除,Listview上下滑动,Listview的iteam的点击事件等bug的解决
- Android禁止gridview与listview上下滑动
- Android:解决ListView按下后上下滑动背景全部变黑的问题
- Android:解决ListView按下后上下滑动背景全部变黑的问题
- Android 秒杀倒计时 解决listview上下滑动计时改变问题
- Android 禁止 ListView 上下滑动
- 同一个listview上下展示不同布局,解决两个listview上下显示不全问题
- android listview与父布局相互滑动
- Android ListView 侧滑效果实现(滑动展开、滑动删除)
- Android ListView 侧滑效果实现(滑动展开、滑动删除)
- Android ListView 侧滑效果实现(滑动展开、滑动删除)
- 解决listview与SwipeRefreshLayout滑动冲突问题
- 解决listview与SwipeRefreshLayout滑动冲突问题
- android --解决GridView上下滑动出现错位问题
- Android 解决GridView与ScrollView上下滑动冲突
- listview上下滑动与item的viewpager左右滑动时的焦点切换问题
- studio警告: 最后一个参数使用了不准确的变量类型的 varargs 方法的非 varargs 调用
- Python中数组的一些特殊用法-1
- caffe源码 之 layer类
- LeetCode 412. Fizz Buzz
- [OpenGL]创建一个窗口
- 【Android】解决Listview侧滑与上下滑动问题+侧滑通用布局 DragRelativeLayout
- Jmeter-JDBC Request的Query Type
- MFC六大核心机制之一:MFC程序的初始化
- (十四)ArcGIS API For Javascript之几何服务
- c++单利对象的释放
- mysql常用命令行
- Java中将数据从excel表格中数据导入到数据库
- RabbitMQ的RPC【JAVA】
- Java内存模型及GC原理