ViewPager 嵌套 ViewPager的解决方法
来源:互联网 发布:化学方程式书写软件 编辑:程序博客网 时间:2024/05/22 11:09
需求是viewpager里面嵌套一个viewpager,一开始没做任何处理的时候,子viewpager无法收到滑动的事件,但是现在的需求是操作子viewpager时不能被父viewpager拦截,找到解决方法:
http://my.eoe.cn/elvnxuan/archive/18214.html
public class ChildViewPager extends ViewPager{ /** 触摸时按下的点 **/ PointF downP = new PointF(); /** 触摸时当前的点 **/ PointF curP = new PointF(); OnSingleTouchListener onSingleTouchListener; public ChildViewPager(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub } public ChildViewPager(Context context) { super(context); // TODO Auto-generated constructor stub } @Override public boolean onInterceptTouchEvent(MotionEvent arg0) { // TODO Auto-generated method stub //当拦截触摸事件到达此位置的时候,返回true, //说明将onTouch拦截在此控件,进而执行此控件的onTouchEvent return true; } @Override public boolean onTouchEvent(MotionEvent arg0) { // TODO Auto-generated method stub //每次进行onTouch事件都记录当前的按下的坐标 curP.x = arg0.getX(); curP.y = arg0.getY(); if(arg0.getAction() == MotionEvent.ACTION_DOWN){ //记录按下时候的坐标 //切记不可用 downP = curP ,这样在改变curP的时候,downP也会改变 downP.x = arg0.getX(); downP.y = arg0.getY(); //此句代码是为了通知他的父ViewPager现在进行的是本控件的操作,不要对我的操作进行干扰 getParent().requestDisallowInterceptTouchEvent(true); } if(arg0.getAction() == MotionEvent.ACTION_MOVE){ //此句代码是为了通知他的父ViewPager现在进行的是本控件的操作,不要对我的操作进行干扰 getParent().requestDisallowInterceptTouchEvent(true); } if(arg0.getAction() == MotionEvent.ACTION_UP){ //在up时判断是否按下和松手的坐标为一个点 //如果是一个点,将执行点击事件,这是我自己写的点击事件,而不是onclick if(downP.x==curP.x && downP.y==curP.y){ onSingleTouch(); return true; } } return super.onTouchEvent(arg0); } /** * 单击 */ public void onSingleTouch() { if (onSingleTouchListener!= null) { onSingleTouchListener.onSingleTouch(); } } /** * 创建点击事件接口 * @author wanpg * */ public interface OnSingleTouchListener { public void onSingleTouch(); } public void setOnSingleTouchListener(OnSingleTouchListener onSingleTouchListener) { this.onSingleTouchListener = onSingleTouchListener; }}
参考帖子地址:http://my.eoe.cn/wanpg/archive/2096.html
解决方案2:
重写ScrollView的onInterceptTouchEvent()回调函数。需要在程序里新加一个ScrollViewExtend类并继承自ScrollView,下面是其代码:
package com.image.indicator.control;import android.content.Context;import android.util.AttributeSet;import android.view.MotionEvent;import android.widget.ScrollView;/** * 能够兼容ViewPager的ScrollView * @Description: 解决了ViewPager在ScrollView中的滑动反弹问题 * @File: ScrollViewExtend.java * @Package com.image.indicator.control * @Author Hanyonglu * @Date 2012-6-18 下午01:34:50 * @Version V1.0 */public class ScrollViewExtend extends ScrollView { // 滑动距离及坐标 private float xDistance, yDistance, xLast, yLast; public ScrollViewExtend(Context context, AttributeSet attrs) { super(context, attrs); } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: xDistance = yDistance = 0f; xLast = ev.getX(); yLast = ev.getY(); break; case MotionEvent.ACTION_MOVE: final float curX = ev.getX(); final float curY = ev.getY(); xDistance += Math.abs(curX - xLast); yDistance += Math.abs(curY - yLast); xLast = curX; yLast = curY; if(xDistance > yDistance){ return false; } } return super.onInterceptTouchEvent(ev); }}
参考帖子地址:http://www.cnblogs.com/hanyonglu/archive/2012/06/19/2555113.html
以下是我的实际解决方法,自定义ViewPager
public class MyViewPager extends ViewPager {public FaceViewPager(Context context, AttributeSet attrs) {super(context, attrs);}@Overridepublic boolean dispatchTouchEvent(MotionEvent ev) {LogPrint.debug("FaceViewPager:" + ev.getAction());if(ev.getAction() == MotionEvent.ACTION_DOWN || ev.getAction() == MotionEvent.ACTION_MOVE) {getParent().requestDisallowInterceptTouchEvent(true);}return super.dispatchTouchEvent(ev);}}
- ViewPager 嵌套 ViewPager的解决方法
- Android ViewPager嵌套ViewPager滑动冲突的解决方法
- Android ViewPager嵌套ViewPager滑动冲突的解决方法
- ViewPager相互嵌套,里层ViewPager无法滑动的解决方法
- ViewPager嵌套ViewPager的问题
- 解决viewpager嵌套scrowllview或者viewpager嵌套viewpager的问题
- viewpager的fragment嵌套viewpager的问题
- ViewPager嵌套ViewPager滑动问题的解决
- viewPager嵌套viewPager的事件冲突问题,
- ViewPager嵌套ViewPager,的事件分发机制!
- ViewPager嵌套ViewPager的冲突解决
- NestedScrollView中嵌套ViewPager导致不能左右切换的解决方法
- viewpager嵌套viewpager
- viewpager嵌套viewpager
- viewpager嵌套viewpager
- viewpager嵌套viewpager
- ViewPager嵌套ViewPager
- 对于ViewPager中嵌套的Viewpager不能响应滑动事件的解决方法
- 非oracle用户执行sqlplus
- 1795[Table Tennis]
- android 随手记 --byte String inputstream 之间的转换
- 文件索引库与内存索引库的结合
- MFC消息机制
- ViewPager 嵌套 ViewPager的解决方法
- 一个和24点有关的算法题 - 无解中
- JAVA数据类型
- GetSystemDefaultLangID
- php生僻字的处理,插入数据库被截断,空白,乱码解决办法,php冷僻字处理
- LINUX内核设计思想之内存管理
- Android的ADB工具使用
- 香港值得购买的药品(整理自天涯)
- 怎么在Mysql中使用iMySQL-Front客户端工具?