Android 實現(xiàn)不能滑動的ViewPager(禁止ViewPager滑動)

? ? ? ?ViewPager在日志Android開發(fā)中幾乎是APP必備的組件,通常的APP中要么有banner,要么有tab+viewpager+fragment 來實現(xiàn)底導tab切換,這樣的APP太多了,部分APP底導允許通過上面的頁面滑動切換Tab的比如微信,但是也有不允許通過上面的頁面滑動切換Tab的,比如支付寶。同樣都是底導類型的界面,可以根據(jù)不同的需求來實現(xiàn),加入兩個都采用? tab + viewpager + fragment 來實現(xiàn)的話,viewpager是默認可以滑動的,那么我們怎么實現(xiàn)類似于支付寶這樣,只允許調(diào)用setCurrentItem 方式來切換,而不允許通過滑動ViewPager來實現(xiàn)呢。

? ? ? ?大家可能立刻就想到是 禁止ViewPager的滑動事件,組織ViewPager通過滑動切換頁面,那么具體怎么實現(xiàn)呢,其實很簡單,下面來說如何做到。

? ? ? ?最直接,最簡單的就是直接讓ViewPager不處理onTouch事件,直接交給他的子控件去處理就行,具體實現(xiàn)如下面代碼,新建一個類,叫做NoScrollViewPager,讓這個類繼承自ViewPager,然后重寫兩個方法,onTouchEvent 和?onInterceptTouchEvent? 這兩個方法。為了便于隨時控制,可以設置一個變量來控制是否允許滑動,noScroll? ,一個boolean值的變量,如果這個值為true,則不允許滑動,默認為true,然后在簽名說的兩個方法中,根據(jù)noScroll的值判斷是否返回false還是交給viewPager去處理滑動邏輯,如果noScroll 為true,則直接返回false,不處理滑動事件(即攔截滑動事件),具體實現(xiàn)代碼如


public class NoScrollViewPager extends ViewPager {

? ? ? ? ? ? private boolean noScroll = true;

? ? ? ? ? ?public NoScrollViewPager(@NonNull Context context) {

? ? ? ? ? ? ? ? ? ? super(context);

? ? ? ? ? }

? ? ? ? ? ?public NoScrollViewPager(@NonNull Context context, @Nullable AttributeSet attrs) {

? ? ? ? ? ? ? ? ? ? super(context, attrs);

? ? ? ? ? ? }

? ? ? ? ? ?@Override

? ? ? ? ? ?public boolean onTouchEvent(MotionEvent 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);

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ?}

}

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容