子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解决嵌套的更多相关文章

  1. 解决嵌套GridView显示不全的问题

    package com.adan.selectcitydome.view; import android.content.Context; import android.util.AttributeS ...

  2. Android慎用layout嵌套, 尽量控制在5层下面java.lang.StackOverflowError

    一.探寻原因 在一个复杂的layout嵌套较多layout的android界面.在Android 2.3.内存较低 的机型上,出现 java.lang.StackOverflowError 这个Exc ...

  3. Android Studio 解决更新慢的问题

    Android Studio 解决更新慢的问题 最近在一些群里有伙伴们反应工具更新慢,由于国内网络对google限制的原因,android studio更新一直是个老大难的问题,为了,提高sdk下载的 ...

  4. Android中解决图像解码导致的OOM问题

    Android中解决图像解码导致的OOM问题 原文链接:http://blog.csdn.net/zjl5211314/article/details/7042017

  5. Android 如何解决dialog弹出时无法捕捉Activity的back事件

    Android 如何解决dialog弹出时无法捕捉Activity的back事件 在一些情况下,我们需要捕捉back键事件,然后在捕捉到的事件里写入我们需要进行的处理,通常可以采用下面三种办法捕捉到b ...

  6. android listView多层嵌套listView显示不全问题

    最近在做项目,需要用到listVIew多层嵌套listVIew的需求,先发现已下两个处理办法比较好用 第一种: public class ListViewNesting extends ListVie ...

  7. Android Studio 解决 Gradle 依赖冲突的问题

    Android Studio 解决 Gradle 依赖冲突的问题 参考链接: Android Studio(Gradle)解决库依赖冲突问题:http://www.mobibrw.com/2016/3 ...

  8. UGUI解决嵌套使用多个ScrollRect时的Drag拖动冲突问题

    很简单,直接看代码: using UnityEngine.UI; using UnityEngine.EventSystems; using UnityEngine; /// <summary& ...

  9. 【Android】解决微信调起支付接口没反应,调不起来微信的问题

    原文:[Android]解决微信调起支付接口没反应,调不起来微信的问题 //#前言 吐槽一下,微信支付的sdk真难用,文档混乱,坑不少. 正文:可能引起这种情况的问题 1. 最不能出现的 你的APPI ...

随机推荐

  1. msdn - Developer Library(包括wpf)重要程度——5星*****

    https://msdn.microsoft.com/zh-cn/library/ms754242(v=vs.110).aspx https://msdn.microsoft.com/zh-cn/li ...

  2. poj2114树分治

    题意:给你一棵树,每条边有权值,求有没有一条链使得权值和为k 题解:和上一题类似,依旧是树分治,只是我们储存结果的时候是判断加起来为k的点对数,刚开始本来想用map存答案,结果就t了,后来用了vect ...

  3. 【JAVA XXE攻击】微信支付官方回应XML外部实体注入漏洞

    官方回应连接:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=23_5 其中明确指出了代码修改的地方. 然后看到此文档后,我就改公司项 ...

  4. Linux-监控与安全运维之Nagios

    1. Nagios 简介是一个开源软件,可以监控网络设备网络流量.Linux/windows主机状态,甚至可以监控打印机它可以运行在Linux上或windows上基于浏览器的web界面方便运维人员查看 ...

  5. tensorflow 学习笔记-1

    http://www.jianshu.com/p/e112012a4b2d 参考的网站 -------------------------------------------------------- ...

  6. LeetCode Beautiful Arrangement

    原题链接在这里:https://leetcode.com/problems/beautiful-arrangement/description/ 题目: Suppose you have N inte ...

  7. 使用.NET中的XML注释(一) -- XML注释标签讲解

    一.摘要 .Net允许开发人员在源代码中插入XML注释,这在多人协作开发的时候显得特别有用. C#解析器可以把代码文件中的这些XML标记提取出来,并作进一步的处理为外部文档. 这篇文章将展示如何使用这 ...

  8. Python函数-map()

    map()函数 map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回.如下: def ...

  9. BZOJ2276:[POI2011]Temperature

    浅谈队列:https://www.cnblogs.com/AKMer/p/10314965.html 题目传送门:https://lydsy.com/JudgeOnline/problem.php?i ...

  10. Monkey测试与MonkeyRunnner测试的区别

    1.Monkey测试  == 压力测试: MonkeyRunner == 自动化测试 2.Monkey工具直接运行在设备或模拟器的adb shell中,生成用户或系统的伪随机事件 3.MonkeyRu ...