欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android中Viewpager禁止滑動的實(shí)現(xiàn)

 更新時(shí)間:2017年05月11日 10:18:13   作者:Jlanglang  
有時(shí)候在開發(fā)中會遇到一些特別的要求,如在ViewPager中嵌入ListView,或者再嵌入一個(gè)ViewPager,那么在滑動的時(shí)候就會造成被嵌入的XXView不能滑動了,那么就把最外層的ViewPager禁止滑動吧,本文就介紹了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)文章

最新評論