Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> 硅谷新聞5--頂部新聞輪播圖事件處理,硅谷5--

硅谷新聞5--頂部新聞輪播圖事件處理,硅谷5--

編輯:關於android開發

硅谷新聞5--頂部新聞輪播圖事件處理,硅谷5--


重寫dispatchTouchEvent,並且要在按下的時候 getParent().requestDisallowInterceptTouchEvent(true);

判斷滑動方向,在X軸和Y軸滑動的絕對值誰大就是在什麼方向滑動

一,豎直方向滑動 getParent().requestDisallowInterceptTouchEvent(false);

二,水平方向滑動

2.1,當滑動到ViewPager的第0個頁面,並且是從左到右滑動 getParent().requestDisallowInterceptTouchEvent(false);

2.2,當滑動到ViewPager的最後一個頁面,並且是從右到左滑動 getParent().requestDisallowInterceptTouchEvent(false); 2.3,其他 getParent().requestDisallowInterceptTouchEvent(true);

public class HorizontalScrollViewPager extends ViewPager {
    public HorizontalScrollViewPager(Context context) {
        super(context);
    }

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

    /**
     * 起始坐標
     */
    private float startX;
    private float startY;

    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {

        switch (ev.getAction()){
            case MotionEvent.ACTION_DOWN:
                //請求父層視圖不攔截,當前控件的事件
                getParent().requestDisallowInterceptTouchEvent(true);//都把事件傳給當前控件(HorizontalScrollViewPager)
                //1.記錄起始坐標
                startX = ev.getX();
                startY = ev.getY();
                break;
            case MotionEvent.ACTION_MOVE:
                //2.來到新的坐標
                float endX = ev.getX();
                float endY = ev.getY();
                //3.計算偏移量
                float distanceX = endX - startX;
                float distanceY = endY - startY;
                //4.判斷滑動方向
                if(Math.abs(distanceX) > Math.abs(distanceY)){
                    //水平方向滑動
//                    2.1,當滑動到ViewPager的第0個頁面,並且是從左到右滑動
//                    getParent().requestDisallowInterceptTouchEvent(false);
                    if(getCurrentItem()==0&&distanceX >0){
                        getParent().requestDisallowInterceptTouchEvent(false);
                    }

//                    2.2,當滑動到ViewPager的最後一個頁面,並且是從右到左滑動
//                    getParent().requestDisallowInterceptTouchEvent(false);
                    else if((getCurrentItem()==(getAdapter().getCount()-1))&& distanceX <0){
                        getParent().requestDisallowInterceptTouchEvent(false);
                    }
//                    2.3,其他,中間部分
//                    getParent().requestDisallowInterceptTouchEvent(true);
                    else{
                        getParent().requestDisallowInterceptTouchEvent(true);
                    }
                }else{
                    //豎直方向滑動
                    getParent().requestDisallowInterceptTouchEvent(false);
                }
                break;
            case MotionEvent.ACTION_UP:
                break;
            default:
                break;
        }
        return super.dispatchTouchEvent(ev);
    }
}

 

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved