ViewPager 禁止滑动

作者: HarryXR | 来源:发表于2016-08-17 10:48 被阅读3561次

    看到网上有千篇一律的解决方法,我亲测总结了两种方法

      public class TestViewpager extends ViewPager {    
            public boolean isCanScroll=true;   
             public TestViewpager(Context context) {      
              this(context,null);   
     }    
           public TestViewpager(Context context, AttributeSet attrs) {                    
                super(context, attrs);   
                 }    
    
           public void setCanScroll(boolean isCanScroll){            
              this.isCanScroll=isCanScroll; 
           }   
    //第一种
           @Override
           public boolean onTouchEvent(MotionEvent ev) {  
               if(!isCanScroll){   
                 return false;      
              }      
               return super.onTouchEvent(ev);   
     }    
          @Override  
          public boolean onInterceptTouchEvent(MotionEvent event) {             
              if(!isCanScroll){       
                  return false;   
              }       
                return super.onInterceptTouchEvent(event); 
         } 
    //第二种
         @Override    
         public void scrollTo(int x, int y) {    
                if(isCanScroll){      
                   super.scrollTo(x, y);    
         }   
      }}
    
    1. 截断分发事件,这种方法适合viewpager嵌套使用
      @Override
           public boolean onTouchEvent(MotionEvent ev) {  
               if(!isCanScroll){   
                 return false;      
              }      
               return super.onTouchEvent(ev);   
     }    
          @Override  
          public boolean onInterceptTouchEvent(MotionEvent event) {             
              if(!isCanScroll){       
                  return false;   
              }       
                return super.onInterceptTouchEvent(event); 
         } 
    

    返回false说明viewpager不消费该事件,当然无法执行了

    2.ViewPager源码里实现就是靠scrollTo,解决它就ok了

         public void scrollTo(int x, int y) {    
                if(isCanScroll){      
                   super.scrollTo(x, y);    
         }   
      }}```

    相关文章

      网友评论

      • 黄光华:onInterceptHoverEvent 应该是笔误吧??
        HarryXR:已修改,谢谢
      • efe81c2fc5c4:第2种方法,不停地尝试左右滑动,会走监听器里的onPageSelected(int position),关键position还会变。。。。。。
        efe81c2fc5c4:第1种方法里的return super.onInterceptHoverEvent(event); 没有写错吗??
      • NicodeLee:ViewPager.setCurretItem方法也会失效,想通过点击Tab button 切换page也无法实现
        是否有解决的办法
        HarryXR:刚试过,第一种方式可以的

      本文标题:ViewPager 禁止滑动

      本文链接:https://www.haomeiwen.com/subject/wsjmsttx.html