解决viewpager嵌套scrowllview或者viewpager嵌套viewpager的问题

package com.theroncake.view;


import android.content.Context;
import android.graphics.PointF;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;


/**
 * 
 * 解决了viewpager中嵌套scrollview,然后scrollview不能滑动的问题
 * 当viewpager嵌套viewpager的时候,子viewpager当滑动到最后一张的时候会滑动到父viewpager的页面
 * ,所以子viewpager需要自定义来重写事件
 * 
 * @author cxj
 * 
 */


public class MyViewPage extends ViewPager {
private boolean scrollble = true;


public MyViewPage(Context context) {
super(context);
}


public MyViewPage(Context context, AttributeSet attrs) {
super(context, attrs);
}


PointF downPoint = new PointF();
OnSingleTouchListener onSingleTouchListener;


// onInterceptTouchEvent的定义为于ViewGroup中,默认返回值为false,表示不拦截TouchEvent


@Override
public boolean onTouchEvent(MotionEvent evt) {// 分发TouchEvent
if (!scrollble) {
return true;
}


switch (evt.getAction()) {
case MotionEvent.ACTION_DOWN:
// 记录按下时候的坐标
downPoint.x = evt.getX();
downPoint.y = evt.getY();
if (this.getChildCount() > 1) { // 有内容,多于1个时
// 通知其父控件,现在进行的是本控件的操作,不允许拦截
getParent().requestDisallowInterceptTouchEvent(true);// 拦截TouchEvent
}
break;
case MotionEvent.ACTION_MOVE:
if (this.getChildCount() > 1) { // 有内容,多于1个时
// 通知其父控件,现在进行的是本控件的操作,不允许拦截
getParent().requestDisallowInterceptTouchEvent(true);
}
break;
case MotionEvent.ACTION_UP:
// 在up时判断是否按下和松手的坐标为一个点
if (PointF.length(evt.getX() - downPoint.x, evt.getY()
- downPoint.y) < (float) 5.0) {
onSingleTouch(this);
return true;
}
break;
}
return super.onTouchEvent(evt);
}


public void onSingleTouch(View v) {
if (onSingleTouchListener != null) {
onSingleTouchListener.onSingleTouch(v);
}
}


public interface OnSingleTouchListener {
public void onSingleTouch(View v);
}


public void setOnSingleTouchListener(
OnSingleTouchListener onSingleTouchListener) {
this.onSingleTouchListener = onSingleTouchListener;
}


public boolean isScrollble() {
return scrollble;
}


public void setScrollble(boolean scrollble) {
this.scrollble = scrollble;
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值