scrollview的子view,当滑动scrollview时,经常回误入子view的点击事件,因此需要重写scrollview,当滑动一定距离,拦截事件
主要是重写onInterceptTouchEvent
public ClickScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
ViewConfiguration vc = ViewConfiguration.get(context);
mSlop = vc.getScaledTouchSlop();
}
private float mDownX; //按下的x坐标
private float mDownY; //按下的y坐标
private int mSlop;
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
//Down事件,初始化变量
case MotionEvent.ACTION_DOWN:
mDownX = ev.getX();
mDownY = ev.getY();
break;
case MotionEvent.ACTION_MOVE:
// X方向和Y方向滑动的距离大于mSlopY。拦截点击事件
if (Math.abs(Math.abs(ev.getX() - mDownX);) > mSlop || Math.abs( Math.abs(ev.getY() - mDownY))> mSlop) {
return true;
}
}
return super.onInterceptTouchEvent(ev);
}
网友评论