Android touch冲突解决小记
2016-06-25 13:39
411 查看
1.ScrollView嵌套ViewPager
ViewPager横向滑动的时候容易变成上下滑动,感觉体验不好,重写ViewPager的onTouchEvent事件,当ViewPager横向滚动的距离大于纵向距离时,设置父容器不拦截滚动事件getParent().requestDisallowInterceptTouchEvent(true);
MyViewPager.java源码
2.ScrollView嵌套ListView
第一个问题是ListView大小的问题,设置固定大小或者动态测量都可以,如果设置的高度小于ListView的全部高度并且希望ListView能够滚动,就需要知道ListView滚动到顶和到底的事件,然后在未到顶或者到底的时候设置父容器不屏蔽滑动事件。
MyListView.java 源码
附件Demo地址:ScrollView嵌套ViewPager和ListView
ScrollView嵌套ViewPager,ViewPager横向滑动时容易上下滚动处理; ScrollView嵌套ListView,ListView滚动事件处理,可滚动;
ScrollView子控件获取焦点后自动置顶问题处理。
ListView滚动到顶或到底事件监听。
ViewPager横向滑动的时候容易变成上下滑动,感觉体验不好,重写ViewPager的onTouchEvent事件,当ViewPager横向滚动的距离大于纵向距离时,设置父容器不拦截滚动事件getParent().requestDisallowInterceptTouchEvent(true);
MyViewPager.java源码
public class MyViewPager extends ViewPager{ // 常量区块============================================================= // 变量区块============================================================= private boolean isDealTouchEvent = true; private float point_down_x; private float point_down_y; // 构造函数区块=========================================================== public MyViewPager(Context context) { super(context); // TODO Auto-generated constructor stub } public MyViewPager(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub } // 方法区块=========================================================== public void setDealTouchEvent(boolean is) { isDealTouchEvent = is; } @Override public boolean onTouchEvent(MotionEvent ev) { float point_x = ev.getX(); float point_y = ev.getY(); switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: point_down_x = point_x; point_down_y = point_y; break; case MotionEvent.ACTION_MOVE: if (isDealTouchEvent) { if (Math.abs(point_x - point_down_x) > Math.abs(point_y - point_down_y)) { getParent().requestDisallowInterceptTouchEvent(true); } } break; case MotionEvent.ACTION_UP: break; default: break; } return super.onTouchEvent(ev); } // 内部接口(类)区块======================================================== }
2.ScrollView嵌套ListView
第一个问题是ListView大小的问题,设置固定大小或者动态测量都可以,如果设置的高度小于ListView的全部高度并且希望ListView能够滚动,就需要知道ListView滚动到顶和到底的事件,然后在未到顶或者到底的时候设置父容器不屏蔽滑动事件。
MyListView.java 源码
public class MyListView extends ListView { // 常量区块============================================================= // 变量区块============================================================= private boolean isDealTouchEvent = true; // 构造函数区块=========================================================== public MyListView(Context context) { super(context); // TODO Auto-generated constructor stub } public MyListView(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub } // 方法区块=========================================================== public void setDealTouchEvent(boolean is) { isDealTouchEvent = is; } @Override public boolean onTouchEvent(MotionEvent ev) { switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: if (isDealTouchEvent) { getParent().requestDisallowInterceptTouchEvent(true); } break; case MotionEvent.ACTION_MOVE: break; case MotionEvent.ACTION_UP: break; default: break; } return super.onTouchEvent(ev); } @Override protected void onOverScrolled(int scrollX, int scrollY, boolean clampedX, boolean clampedY) { // TODO Auto-generated method stub if (isDealTouchEvent) { if (scrollX == 0 && scrollY == 0) { /*if (getFirstVisiblePosition() == 0) { // 到顶 } else { // 到底 }*/ getParent().requestDisallowInterceptTouchEvent(false); } } super.onOverScrolled(scrollX, scrollY, clampedX, clampedY); } // 内部接口(类)区块======================================================== }
附件Demo地址:ScrollView嵌套ViewPager和ListView
ScrollView嵌套ViewPager,ViewPager横向滑动时容易上下滚动处理; ScrollView嵌套ListView,ListView滚动事件处理,可滚动;
ScrollView子控件获取焦点后自动置顶问题处理。
ListView滚动到顶或到底事件监听。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories