Android中Viewpager禁止滑動的實(shí)現(xiàn)
前言
現(xiàn)在很多app,首頁不允許滑動切換(因?yàn)轫撁婕虞d吧),但是又用viewpage來管理frgament.因?yàn)榉奖懵?
以前在網(wǎng)上找的例子:
public class NoScrollViewPager extends ViewPager { public NoScrollViewPager(Context context, AttributeSet attrs) { super(context, attrs); } public NoScrollViewPager(Context context) { super(context); } @Override public boolean dispatchTouchEvent(MotionEvent ev) { //不攔截,否則子孩子都無法收到事件,一般這個(gè)自定義的時(shí)候都不作處理 return super.dispatchTouchEvent(ev); } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { return super.onInterceptTouchEvent(ev); } @Override public boolean onTouchEvent(MotionEvent ev) { return true; }
這個(gè)自定義如果繼承的Viewpager是低版本的,那么是沒問題的.
但是如果你編譯時(shí)用是高版本的api,5.0以后吧.上面這個(gè)自定義就會失效,
你會發(fā)現(xiàn),會有細(xì)微的滑動.還是能滑動的
判斷老的還是新的,看setOnPageChangeListener就知道了
最新的Viewpager里面這個(gè)方法已經(jīng)廢棄了,改成addOnPageChangeListener()
了.
由于之前改viewpager做懶加載.一直保留了一個(gè)老版本的Viewpager使用.直到最近才發(fā)現(xiàn).
改進(jìn)后
public class NoScrollViewPager extends ViewPager { private boolean isScroll; public NoScrollViewPager(Context context,AttributeSetattrs{ super(context, attrs); } public NoScrollViewPager(Context context) { super(context); } /** * 1.dispatchTouchEvent一般情況不做處理 *,如果修改了默認(rèn)的返回值,子孩子都無法收到事件 */ @Override public boolean dispatchTouchEvent(MotionEvent ev) { return super.dispatchTouchEvent(ev); // return true;不行 } /** * 是否攔截 * 攔截:會走到自己的onTouchEvent方法里面來 * 不攔截:事件傳遞給子孩子 */ @Override public boolean onInterceptTouchEvent(MotionEvent ev) { // return false;//可行,不攔截事件, // return true;//不行,孩子無法處理事件 //return super.onInterceptTouchEvent(ev);//不行,會有細(xì)微移動 if (isScroll){ return super.onInterceptTouchEvent(ev); }else{ return false; } } /** * 是否消費(fèi)事件 * 消費(fèi):事件就結(jié)束 * 不消費(fèi):往父控件傳 */ @Override public boolean onTouchEvent(MotionEvent ev) { //return false;// 可行,不消費(fèi),傳給父控件 //return true;// 可行,消費(fèi),攔截事件 //super.onTouchEvent(ev); //不行, //雖然onInterceptTouchEvent中攔截了, //但是如果viewpage里面子控件不是viewgroup,還是會調(diào)用這個(gè)方法. if (isScroll){ return super.onTouchEvent(ev); }else { return true;// 可行,消費(fèi),攔截事件 } } public void setScroll(boolean scroll) { isScroll = scroll; } }
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
Android Studio 3.6 調(diào)試 smali的全過程
這篇文章主要介紹了Android Studio 3.6 調(diào)試 smali, 目前最新版的 Android Studio 利用附加功能調(diào)試 smali 非常方便,具體操作步驟跟隨小編一起看看吧2020-02-02Android開發(fā)自學(xué)筆記(三):APP布局上
這篇文章主要介紹了Android開發(fā)自學(xué)筆記(三):APP布局上,本文講解了添加ViewGroup、添加ViewGroup、定義string內(nèi)容、添加Button、運(yùn)行程序查看效果等內(nèi)容,需要的朋友可以參考下2015-04-04Mac 下 Android Studio 不打印日志的解決辦法
這篇文章主要介紹了Mac 下 Android Studio 不打印日志的解決辦法的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下2017-10-10Android開發(fā)使用RecyclerView添加點(diǎn)擊事件實(shí)例詳解
這篇文章主要為大家介紹了Android開發(fā)使用RecyclerView添加點(diǎn)擊事件實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08Android開發(fā)兩個(gè)activity之間傳值示例詳解
這篇文章主要為大家介紹了Android開發(fā)兩個(gè)activity之間傳值示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07Android自定義ViewPager實(shí)現(xiàn)個(gè)性化的圖片切換效果
這篇文章主要介紹了Android自定義ViewPager實(shí)現(xiàn)個(gè)性化的圖片切換效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-05-05Android編程向服務(wù)器發(fā)送請求時(shí)出現(xiàn)中文亂碼問題的解決方法
這篇文章主要介紹了Android編程向服務(wù)器發(fā)送請求時(shí)出現(xiàn)中文亂碼問題的解決方法,實(shí)例分析了Android參數(shù)傳遞過程中中文亂碼的解決技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11Android 實(shí)現(xiàn)圖片轉(zhuǎn)二進(jìn)制流及二進(jìn)制轉(zhuǎn)字符串
這篇文章主要介紹了Android 實(shí)現(xiàn)圖片轉(zhuǎn)二進(jìn)制流及二進(jìn)制轉(zhuǎn)字符串,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03Android自定義View實(shí)現(xiàn)九宮格圖形解鎖(Kotlin版)
這篇文章主要為大家詳細(xì)介紹了Android自定義View實(shí)現(xiàn)九宮格圖形解鎖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09