package com.atguigu.beijingnews.view;
import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.MotionEvent;
/**
* 作者:尚硅谷-杨光福 on 2017/2/7 11:26
* 微信:yangguangfu520
* QQ号:541433511
* 作用:自定义水平方向滑动ViewPager
*/
public class HorizontalScrollViewPager extends ViewPager {
public HorizontalScrollViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
private float startX;
private float startY;
/**
* 水平方向滑动
* 1.当页面是第0个,并且滑动方向是从左到右边
* getParent().requestDisallowInterceptTouchEvent(false);
* 2.当页面是最后一个页面,并且滑动方向是从右到左滑动
* getParent().requestDisallowInterceptTouchEvent(false);
* 3.其他部分,就是中间部分
* getParent().requestDisallowInterceptTouchEvent(true);
*
*
*
* 竖直方向滑动
* getParent().requestDisallowInterceptTouchEvent(false);
*
* @param ev
* @return
*/
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
switch (ev.getAction()){
case MotionEvent.ACTION_DOWN:
getParent().requestDisallowInterceptTouchEvent(true);
//1.记录起始坐标
startX = ev.getX();
startY = ev.getY();
break;
case MotionEvent.ACTION_MOVE:
//2.来到结束坐标
float endX = ev.getX();
float endY = ev.getY();
//3.计算水平方向和竖直方向滑动的距离
float distanceX = Math.abs(endX - startX);
float distanceY = Math.abs(endY- startY);
if(distanceX >distanceY ){
//水平方向
//1.当页面是第0个,并且滑动方向是从左到右边
if(getCurrentItem()==0 && endX - startX >0){
getParent().requestDisallowInterceptTouchEvent(false);
}
//2.当页面是最后一个页面,并且滑动方向是从右到左滑动
else if(getCurrentItem()==getAdapter().getCount()-1&& endX - startX <0){
getParent().requestDisallowInterceptTouchEvent(false);
}else{
getParent().requestDisallowInterceptTouchEvent(true);
}
}else{
//竖直方向
getParent().requestDisallowInterceptTouchEvent(false);
}
break;
}
return super.dispatchTouchEvent(ev);
}
}