114、Android禁止ViewPager的左右滑動

來源:互聯網
上載者:User

標籤:code   return   cto   generated   解決   ext   重寫   就會   das   

有時候在開發中會遇到一些“詭異”的要求,比如在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 = true;    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在布局檔案中的定義。

114、Android禁止ViewPager的左右滑動

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.