Android 自定义ViewPager设置屏蔽左右滑动事件


只要有欲望,就应该有奋斗的心....


屏蔽左右滑动事件的viewPager


public class CustomNoScrollViewPager extends ViewPager{

	    private boolean noScroll = false;
	 
	    public CustomNoScrollViewPager(Context context, AttributeSet attrs) {
	        super(context, attrs);
	    }
	 
	    public CustomNoScrollViewPager(Context context) {
	        super(context);
	    }
	 
	    public void setNoScroll(boolean noScroll) {
	        this.noScroll = noScroll;
	    }
	 
	    @Override
	    public void scrollTo(int x, int y) {
	        super.scrollTo(x, y);
	    }
	 
	    @Override
	    public boolean onTouchEvent(MotionEvent arg0) {
	        /* return false;//super.onTouchEvent(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);
	    }
	 
	    @Override
	    public void setCurrentItem(int item, boolean smoothScroll) {
	        super.setCurrentItem(item, smoothScroll);
	    }
	 
	    @Override
	    public void setCurrentItem(int item) {
	        super.setCurrentItem(item);
	    }
	 
	}



在使用些viewpager的时候,只需要在合适的时候调用 viewpager.setNoScroll(true)方法,即可以实现屏蔽viewpager的左右滑动



ViewPager嵌套ViewPager 的使用 

解决子ViewPager与父viewpager的事件冲突问题

import android.content.Context;
import android.graphics.PointF;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.MotionEvent;

public class CustomAndParentViewpager extends ViewPager {
	 /** 触摸时按下的点 **/
    PointF downP = new PointF();
    /** 触摸时当前的点 **/
    PointF curP = new PointF();
  
    public CustomAndParentViewpager(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
  
    public CustomAndParentViewpager(Context context) {
        super(context);
    }
  
    @Override
    public boolean onTouchEvent(MotionEvent arg0) {
        //每次进行onTouch事件都记录当前的按下的坐标
        if(getChildCount()<=1)
        {
          return super.onTouchEvent(arg0);
        }
        curP.x = arg0.getX();
        curP.y = arg0.getY();
  
        if(arg0.getAction() == MotionEvent.ACTION_DOWN)
        {
         
            //记录按下时候的坐标
            //切记不可用 downP = curP ,这样在改变curP的时候,downP也会改变
            downP.x = arg0.getX();
            downP.y = arg0.getY();
            //此句代码是为了通知他的父ViewPager现在进行的是本控件的操作,不要对我的操作进行干扰
            getParent().requestDisallowInterceptTouchEvent(true);
        }
  
        if(arg0.getAction() == MotionEvent.ACTION_MOVE){
            //此句代码是为了通知他的父ViewPager现在进行的是本控件的操作,不要对我的操作进行干扰
            getParent().requestDisallowInterceptTouchEvent(true);
        }
  
        if(arg0.getAction() == MotionEvent.ACTION_UP || arg0.getAction() == MotionEvent.ACTION_CANCEL){
            //在up时判断是否按下和松手的坐标为一个点
            //如果是一个点,将执行点击事件,这是我自己写的点击事件,而不是onclick
            getParent().requestDisallowInterceptTouchEvent(false);
            if(downP.x==curP.x && downP.y==curP.y){
            
                return true;
            }
        }
         super.onTouchEvent(arg0); //注意这句不能 return super.onTouchEvent(arg0); 否则触发parent滑动
        return true;
    }
}





 Android自定义控件ImageViwe(一)——依据控件的大小来设置缩放图片显示
    点击打开链接
    
 Android自定义ImageView(二)——实现双击放大与缩小图片
    点击打开链接
    
 Android自定义控件ImageViwe(三)——随手指进行图片的缩放
    点击打开链接
    
 Android自定义控件ImageViwe(四)——多点触控实现图片的自由移动  
    点击打开链接
    
 Android ListView分组排序显示数据
    点击打开链接
    
 Android自定义下拉刷新功能的ListView
    点击打开链接
    
 Android音乐播放器高级开发
    点击打开链接
    
 Android自定义控件之流式布局
 点击打开链接





早起的年轻人 CSDN认证博客专家 移动开发 项目管理 Java
只要用心去做,每一件事情还是有可能成功的,当然成功是没有界限的,只不过是达到自己心里的那个目标,公众号:我的大前端生涯,一个爱喝茶的程序员,通常会搞搞SpringBoot 、Herbinate、Mybatiys、Android、iOS、Flutter、Vue、小程序等.
©️2020 CSDN 皮肤主题: 代码科技 设计师:Amelia_0503 返回首页