package com.topnews.view.imageshow; 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; import android.widget.ImageView; public class ImageShowViewPager extends ViewPager { PointF last; public TouchImageView mCurrentView; public ImageShowViewPager(Context context) { super(context); } public ImageShowViewPager(Context context, AttributeSet attrs) { super(context, attrs); } private float[] handleMotionEvent(MotionEvent event) { switch (event.getAction() & MotionEvent.ACTION_MASK) { case MotionEvent.ACTION_DOWN: last = new PointF(event.getX(0), event.getY(0)); break; case MotionEvent.ACTION_MOVE: case MotionEvent.ACTION_UP: PointF curr = new PointF(event.getX(0), event.getY(0)); return new float[] { curr.x - last.x, curr.y - last.y }; } return null; } @Override public boolean onTouchEvent(MotionEvent event) { if ((event.getAction() & MotionEvent.ACTION_MASK) == MotionEvent.ACTION_UP) { super.onTouchEvent(event); } float[] difference = handleMotionEvent(event); if (mCurrentView.pagerCanScroll()) { return super.onTouchEvent(event); } else { if (difference != null && mCurrentView.onRightSide && difference[0] < 0) // move // right { return super.onTouchEvent(event); } if (difference != null && mCurrentView.onLeftSide && difference[0] > 0) // move // left { return super.onTouchEvent(event); } if (difference == null && (mCurrentView.onLeftSide || mCurrentView.onRightSide)) { return super.onTouchEvent(event); } } return false; } @Override public boolean onInterceptTouchEvent(MotionEvent event) { if ((event.getAction() & MotionEvent.ACTION_MASK) == MotionEvent.ACTION_UP) { super.onInterceptTouchEvent(event); } float[] difference = handleMotionEvent(event); if (mCurrentView.pagerCanScroll()) { return super.onInterceptTouchEvent(event); } else { if (difference != null && mCurrentView.onRightSide && difference[0] < 0) // move // right { return super.onInterceptTouchEvent(event); } if (difference != null && mCurrentView.onLeftSide && difference[0] > 0) // move // left { return super.onInterceptTouchEvent(event); } if (difference == null && (mCurrentView.onLeftSide || mCurrentView.onRightSide)) { return super.onInterceptTouchEvent(event); } } return false; } }