嵌套viewpager触摸的事件分发事件处理

来源:互联网 发布:c语言将字符存入字符串 编辑:程序博客网 时间:2024/06/06 07:03

现在有一个需求:

有一个模块:使用了viewpager技术,有三个页面组成(该viewpager称为A),可以通过滑动切换

如图所示:

但是在第一个页面中,添加了一个广告轮播图,也是使用viewpager组件(称为B),设想是该广告轮播图也是可以滑动,但是和页面的滑动切换互不干扰

此时就出现问题了

当手指想要滑动广告轮播图的时候,该广告轮播图的点击事件被页面的A消费掉了,页面进行了切换而不是轮播图进行切换(但实际需求是要求轮播图切换)

 

 

解决的思路:当点击事件发生在轮播图控件的时候,就通知B的父控件A,我需要消费该点击事件,你不要干扰我

此时需要把轮播图用到的viewpager改写成自定义控件

代码:

/** * 新闻轮播图ViewPager *  * @author liangjian *  */public class NewsViewpager extends ViewPager {/** 触摸时按下的点 **/PointF downP = new PointF();/** 触摸时当前的点 **/PointF curP = new PointF();OnSingleTouchListener onSingleTouchListener;public NewsViewpager(Context context, AttributeSet attrs) {super(context, attrs);}public NewsViewpager(Context context) {super(context);}@Overridepublic boolean onInterceptTouchEvent(MotionEvent arg0) {// TODO Auto-generated method stub// 当拦截触摸事件到达此位置的时候,返回true,// 说明将onTouch拦截在此控件,进而执行此控件的onTouchEventreturn true;}@Overridepublic 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) {if ((curP.x - downP.x <= 10 && curP.x - downP.x >= -10)&& (curP.y - downP.y <= 10 && curP.y - downP.y >= -10)) {onSingleTouch();return true;}}return super.onTouchEvent(arg0);}/** * 单击 */public void onSingleTouch() {if (onSingleTouchListener != null) {onSingleTouchListener.onSingleTouch();}}/** * 创建点击事件接口 *  * @author liangjian *  */public interface OnSingleTouchListener {public void onSingleTouch();}public void setOnSingleTouchListener(OnSingleTouchListener onSingleTouchListener) {this.onSingleTouchListener = onSingleTouchListener;}}


 

0 0
原创粉丝点击