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;
    }
}
android viewpage解决嵌套的更多相关文章
- 解决嵌套GridView显示不全的问题
		package com.adan.selectcitydome.view; import android.content.Context; import android.util.AttributeS ... 
- Android慎用layout嵌套, 尽量控制在5层下面java.lang.StackOverflowError
		一.探寻原因 在一个复杂的layout嵌套较多layout的android界面.在Android 2.3.内存较低 的机型上,出现 java.lang.StackOverflowError 这个Exc ... 
- Android Studio 解决更新慢的问题
		Android Studio 解决更新慢的问题 最近在一些群里有伙伴们反应工具更新慢,由于国内网络对google限制的原因,android studio更新一直是个老大难的问题,为了,提高sdk下载的 ... 
- Android中解决图像解码导致的OOM问题
		Android中解决图像解码导致的OOM问题 原文链接:http://blog.csdn.net/zjl5211314/article/details/7042017 
- Android 如何解决dialog弹出时无法捕捉Activity的back事件
		Android 如何解决dialog弹出时无法捕捉Activity的back事件 在一些情况下,我们需要捕捉back键事件,然后在捕捉到的事件里写入我们需要进行的处理,通常可以采用下面三种办法捕捉到b ... 
- android listView多层嵌套listView显示不全问题
		最近在做项目,需要用到listVIew多层嵌套listVIew的需求,先发现已下两个处理办法比较好用 第一种: public class ListViewNesting extends ListVie ... 
- Android Studio 解决 Gradle 依赖冲突的问题
		Android Studio 解决 Gradle 依赖冲突的问题 参考链接: Android Studio(Gradle)解决库依赖冲突问题:http://www.mobibrw.com/2016/3 ... 
- UGUI解决嵌套使用多个ScrollRect时的Drag拖动冲突问题
		很简单,直接看代码: using UnityEngine.UI; using UnityEngine.EventSystems; using UnityEngine; /// <summary& ... 
- 【Android】解决微信调起支付接口没反应,调不起来微信的问题
		原文:[Android]解决微信调起支付接口没反应,调不起来微信的问题 //#前言 吐槽一下,微信支付的sdk真难用,文档混乱,坑不少. 正文:可能引起这种情况的问题 1. 最不能出现的 你的APPI ... 
随机推荐
- jsp:tld标签
			z注意每个uri地址要保持统一 1.创建MytagPrinta.java文件 package cn.tag; import java.io.IOException; import javax.serv ... 
- 有关linux下redis overcommit_memory的问题,有需要的朋友可以参考下。
			我在安装redis-4.0.6后,启动时出现一些问题,如下: :M Jan ::! Background save may fail under low memory condition. To fi ... 
- excel中日期设置星期
			在设置日期格式中-自定义中-设置填入yyyy-mm-dd [$-804]aaa;@ 即可. 
- handsontable 给单元格自定义属性
			setHotAttr(hotObj,rowHeader,colHeader){// 给handsongtable绑定行列属性 console.log(hotObj); console.log(colH ... 
- centos下 yum安装ngix
			1.CentOS 6,先执行:rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6. ... 
- Python with 结构
			一段基本的 with 表达式,其结构是这样的: with EXPR as VAR: BLOCK EXPR 可以是任意表达式: as VAR 是可选的.其一般的执行过程是这样的: 计算 EXPR ,并获 ... 
- map的内存分配机制分析
			该程序演示了map在形成的时候对内存的操作和分配. 因为自己对平衡二叉树的创建细节理解不够,还不太明白程序所显示的日志.等我明白了,再来修改这个文档. /* 功能说明: map的内存分配机制分析. 代 ... 
- 【转载,实测好用】gitlab结合sourcetree使用
			转载 的出处http://blog.csdn.net/u012764358/article/details/62886427 Gitlab和Sourcetree结合使用实现代码管理 这是本人第一次发表 ... 
- poj 1201 Intervals——差分约束裸题
			题目:http://poj.org/problem?id=1201 差分约束裸套路:前缀和 本题可以不把源点向每个点连一条0的边,可以直接把0点作为源点.这样会快许多! 可能是因为 i-1 向 i 都 ... 
- python3 之初学者常犯的5个错误
			1. Creating a copy of dictionary or lists. Whenever you need to make a copy of a dictionary or list, ... 
