Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android開發之定制ViewPager滑動事件

android開發之定制ViewPager滑動事件

編輯:關於Android編程

明天還要加班,苦逼的程序猿,簡單說說最近遇到的一個問題吧。
我在viewpager+fragment學習筆記中簡單介紹過ViewPager+Fragment的用法,其實並不難,當時實現了一個如下圖所示的效果:


這裡寫圖片描述


然而,在實際開發中這一點技術可能根本不夠用,項目中會有各種各樣奇葩的需求,我最近就遇到了一個怪異的需求,搗鼓之後還是解決了,今天和大家聊聊。

由於涉及到公司項目,我在這裡就使用我自己制作的一個Demo來和大家介紹。
我們要實現的效果如下圖:<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxociAvPg0KPHA+PGltZyBhbHQ9"這裡寫圖片描述" src="/uploadfile/Collfiles/20150822/2015082208374211.gif" title="\" />


這裡一共有三個Fragment,其中兩個通過左右滑動顯示,第三個要通過點擊右上角的+來顯示,在第三個Fragment上我們通過點擊Fragment上的一個按鈕再回到第一個Fragment上。其實這個要做非常簡單,就是重寫ViewPager的onTouch事件,在onTouch中判斷當前的item,如果是1則取消向左滑動的動作。大致的一個思路就是這樣。看代碼:

public class MyViewPager extends ViewPager {

    private int startX;
    private float currentX;

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

    public MyViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        switch (ev.getAction()) {
        case MotionEvent.ACTION_DOWN:
            startX = (int) ev.getX();
            Log.i(lenve, ACTION_DOWN);
            break;
        case MotionEvent.ACTION_MOVE:
            Log.i(lenve, ACTION_MOVE);
            currentX = ev.getX();
            break;
        case MotionEvent.ACTION_UP:
            Log.i(lenve, ACTION_UP);
            break;
        }
        if (getCurrentItem() == 1 && currentX < startX) {
            return false;
        } else if (getCurrentItem() == 2) {
            return false;
        } else {
            return super.onTouchEvent(ev);
        }
    }
}

我在項目中是重寫了onInterceptTouchEvent方法。但是這裡重寫onInterceptTouchEvent不管用,還是得重寫onTouchEvent事件,個中原因想到周日好好研究研究,明天還要加班,今天就說這麼多吧。有問題歡迎討論。

 

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