• android viewpage解决嵌套


    子viewpage 自定义 

    写法一:

    public class ChildViewPager extends ViewPager{
       /** 触摸时按下的点 **/
       PointF downP = new PointF();
       /** 触摸时当前的点 **/
       PointF curP = new PointF();
       OnSingleTouchListener onSingleTouchListener;
      
       public ChildViewPager(Context context, AttributeSet attrs) {
           super(context, attrs);
           // TODO Auto-generated constructor stub
       }
      
       public ChildViewPager(Context context) {
           super(context);
          // TODO Auto-generated constructor stub
       }
      
       @Override
       public boolean onInterceptTouchEvent(MotionEvent arg0) {
           // TODO Auto-generated method stub
           //当拦截触摸事件到达此位置的时候,返回true,
           //说明将onTouch拦截在此控件,进而执行此控件的onTouchEvent
           return true;
       }
      
       @Override
       public boolean onTouchEvent(MotionEvent arg0) {
           // TODO Auto-generated method stub
           //每次进行onTouch事件都记录当前的按下的坐标
           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){
               //在up时判断是否按下和松手的坐标为一个点
               //如果是一个点,将执行点击事件,这是我自己写的点击事件,而不是onclick
               if(downP.x==curP.x && downP.y==curP.y){    // 当前的点和现在的点相等
                   onSingleTouch(); //点击事件回调
                   return true;
               }
           }
          
           return super.onTouchEvent(arg0);
       }
      
       /**
       * 单击
       */
       public void onSingleTouch() {
       if (onSingleTouchListener!= null) {
      
         onSingleTouchListener.onSingleTouch();
       }
       }
      
       /**
       * 创建点击事件接口
       * @author wanpg
       *
       */
       public interface OnSingleTouchListener {
           public void onSingleTouch();
       }
      
       public void setOnSingleTouchListener(OnSingleTouchListener 
               onSingleTouchListener) {
            this.onSingleTouchListener = onSingleTouchListener;
       }
      
    }

    写法二 :

    public class MyViewPager extends ViewPager {
    
        public MyViewPager(Context context) {
            super(context);
        }
    
        public MyViewPager(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
    
        PointF downPoint = new PointF();
        OnSingleTouchListener onSingleTouchListener;
    
        @Override
        public boolean onTouchEvent(MotionEvent evt) {
            switch (evt.getAction()) {
            case MotionEvent.ACTION_DOWN:
                // 记录按下时候的坐标
                downPoint.x = evt.getX();
                downPoint.y = evt.getY();
                if (this.getChildCount() > 1) { //有内容,多于1个时
                    // 通知其父控件,现在进行的是本控件的操作,不允许拦截
                    getParent().requestDisallowInterceptTouchEvent(true);
                }
                break;
            case MotionEvent.ACTION_MOVE:
                if (this.getChildCount() > 1) { //有内容,多于1个时
                    // 通知其父控件,现在进行的是本控件的操作,不允许拦截
                    getParent().requestDisallowInterceptTouchEvent(true);
                }
                break;
            case MotionEvent.ACTION_UP:
                // 在up时判断是否按下和松手的坐标为一个点
                if (PointF.length(evt.getX() - downPoint.x, evt.getY()
                        - downPoint.y) < (float) 5.0) {
                    onSingleTouch(this);
                    return true;
                }
                break;
            }
            return super.onTouchEvent(evt);
        }
    
        public void onSingleTouch(View v) {
            if (onSingleTouchListener != null) {
                onSingleTouchListener.onSingleTouch(v);
            }
        }
    
        public interface OnSingleTouchListener {
            public void onSingleTouch(View v);
        }
    
        public void setOnSingleTouchListener(
                OnSingleTouchListener onSingleTouchListener) {
            this.onSingleTouchListener = onSingleTouchListener;
        }
    }
  • 相关阅读:
    阿里P8架构师谈:阿里双11秒杀系统如何设计?
    秒杀系统设计的知识点
    秒杀系统架构优化思路
    秒杀系统解决方案
    Entity Framework Code First (七)空间数据类型 Spatial Data Types
    Entity Framework Code First (六)存储过程
    Entity Framework Code First (五)Fluent API
    Entity Framework Code First (四)Fluent API
    Entity Framework Code First (三)Data Annotations
    Entity Framework Code First (二)Custom Conventions
  • 原文地址:https://www.cnblogs.com/java-g/p/4550924.html
Copyright © 2020-2023  润新知