Android禁止ViewPager的左右滑動

有時候在開發中會遇到一些“詭異”的要求,比如在ViewPager中嵌入ListView,或者再嵌入一個ViewPager,那麼在滑動的時候就會造成被嵌入的XXView不能滑動了,那麼現在就把最外層的ViewPager禁止滑動吧,讓被嵌入的XXView獲得滑動事件好了。關於解決方法,網上也有很多說法,基本上是一致的,但是需要理解這個Android下的事件分發機制才行,不明白事件分發機制的,上網查些資料看看,然後我這裏也有簡單的介紹,請參看博客Android自定義控件——側滑菜單的下方。
怎樣禁止ViewPager左右滑動呢?大致就是重寫ViewPager,覆蓋ViewPager的onInterceptTouchEvent(MotionEvent arg0)方法和onTouchEvent(MotionEvent arg0)方法,這兩個方法的返回值都是boolean類型的,只需要將返回值改爲false,那麼ViewPager就不會消耗掉手指滑動的事件了,轉而傳遞給上層View去處理或者該事件就直接終止了。下面是我的自定義ViewPager。

public class NoScrollViewPager extends ViewPager {
    private boolean noScroll = false;

    public NoScrollViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
        // TODO Auto-generated constructor stub
    }

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

    public void setNoScroll(boolean noScroll) {
        this.noScroll = noScroll;
    }

    @Override
    public void scrollTo(int x, int y) {
        super.scrollTo(x, y);
    }

    @Override
    public boolean onTouchEvent(MotionEvent arg0) {
        /* return false;//super.onTouchEvent(arg0); */
        if (noScroll)
            return false;
        else
            return super.onTouchEvent(arg0);
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent arg0) {
        if (noScroll)
            return false;
        else
            return super.onInterceptTouchEvent(arg0);
    }

    @Override
    public void setCurrentItem(int item, boolean smoothScroll) {
        super.setCurrentItem(item, smoothScroll);
    }

    @Override
    public void setCurrentItem(int item) {
        super.setCurrentItem(item);
    }

}

以上代碼特別簡單,大家可以直接拷貝使用,無需做任何修改。爲了操作方便,我在這個自定義的ViewPager裏設置了一個boolean類型的控制變量,並且向外提供了控制ViewPager是否禁止滑動的方法,這樣就顯得靈活一點了。以下是自定義ViewPager在佈局文件中的定義。

<com.example.studydemo.view.NoScrollViewPager
        android:id="@+id/pager"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_marginTop="5dp"
        android:layout_weight="1" />
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章