Android中Viewpager禁止滑動(dòng)的實(shí)現(xiàn)
前言
現(xiàn)在很多app,首頁不允許滑動(dòng)切換(因?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è)自定義就會(huì)失效,
你會(huì)發(fā)現(xiàn),會(huì)有細(xì)微的滑動(dòng).還是能滑動(dòng)的
判斷老的還是新的,看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;不行
}
/**
* 是否攔截
* 攔截:會(huì)走到自己的onTouchEvent方法里面來
* 不攔截:事件傳遞給子孩子
*/
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
// return false;//可行,不攔截事件,
// return true;//不行,孩子無法處理事件
//return super.onInterceptTouchEvent(ev);//不行,會(huì)有細(xì)微移動(dòng)
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,還是會(huì)調(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)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
Android 高仿微信朋友圈動(dòng)態(tài)支持雙擊手勢(shì)放大并滑動(dòng)查看圖片效果
這篇文章主要介紹了Android 高仿微信朋友圈動(dòng)態(tài)支持雙擊手勢(shì)放大并滑動(dòng)查看圖片效果,需要的朋友參考下2017-01-01
Flutter Widget開發(fā)Shortcuts快捷鍵實(shí)例
這篇文章主要為大家介紹了Flutter Widget開發(fā)Shortcuts快捷鍵實(shí)例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12
5步教你快速寫一個(gè)android Router路由框架
本篇文章主要介紹了5步教你快速寫一個(gè)Router路由框架(詳細(xì)步驟),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-11-11
Android中VideoView音視頻開發(fā)的實(shí)現(xiàn)
VideoView是一個(gè)用于播放視頻的視圖組件,可以方便地在應(yīng)用程序中播放本地或網(wǎng)絡(luò)上的視頻文件,本文主要介紹了Android中VideoView音視頻開發(fā)的實(shí)現(xiàn),具有一定的 參考價(jià)值,感興趣的可以了解一下2025-03-03
Android ListView實(shí)現(xiàn)下拉頂部圖片變大效果
這篇文章主要為大家詳細(xì)介紹了Android ListView實(shí)現(xiàn)下拉頂部圖片變大,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12
Android波紋擴(kuò)散效果之仿支付寶咻一咻功能實(shí)現(xiàn)波紋擴(kuò)散特效
這篇文章主要介紹了Android波紋擴(kuò)散效果之仿支付寶咻一咻功能實(shí)現(xiàn)波紋擴(kuò)散特效的相關(guān)資料,需要的朋友可以參考下2016-02-02

