文档章节

Android ViewPager嵌套ViewPager布局

IamOkay
 IamOkay
发布于 2015/03/06 06:50
字数 598
阅读 12739
收藏 16
点赞 0
评论 0

一、事件分发与拦截问题

dispatchTouchEvent方法用于事件的分发,Android中所有的事件都必须经过这个方法的分发,
然后决定是自身消费当前事件还是继续往下分发给子控件处理。返回true表示不继续分发,事件没有被消费。
返回false则继续往下分发,如果是ViewGroup则分发给onInterceptTouchEvent进行判断是否拦截该事件。
onTouchEvent方法用于事件的处理,返回true表示消费处理当前事件,返回false则不处理,交给子控件进行继续分发。
onInterceptTouchEvent是ViewGroup中才有的方法,View中没有,它的作用是负责事件的拦截,返回true的时候表示拦截当前事件,
不继续往下分发,交给自身的onTouchEvent进行处理。返回false则不拦截,继续往下传。这是ViewGroup特有的方法,
因为ViewGroup中可能还有子View,而在Android中View中是不能再包含子View的(iOS可以)。

二、viewPager嵌套问题的处理

package com.lwj.app.customview;

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

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 onTouchEvent(MotionEvent arg0) {
        // TODO Auto-generated method stub
        //每次进行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;
    }
 
 
}

 

© 著作权归作者所有

共有 人打赏支持
IamOkay
粉丝 187
博文 450
码字总数 368039
作品 0
海淀
程序员
Android NestedScrollView/ScrollView包裹ViewPager自适应高度

Android NestedScrollView/ScrollView包裹ViewPager自适应高度 当Android的NestedScrollView/ScrollView这类滚动View包裹ViewPager时候,ViewPager中的Fragment包含的又是一系列高度值不固定...

zhangphil ⋅ 05/12 ⋅ 0

打造万能的BannerView(ViewPager)无限轮播图

为什么写这篇文章,因为在网上看到的绝大多数BannerView实现了右无限轮播图,甚至没有实现无限轮播图,说成是无限轮播图,实现了左右无限轮播图的,并没有做性能上的优化。 先看张效果图 工程...

Steven_520 ⋅ 05/11 ⋅ 0

你真的会用Fragment吗?Fragment复用的那些事儿

作者: @怪盗kidou 如需转载不得删除本文中的任何内容(含本段) 如果博客中有不恰当之处欢迎在原文中留言交流 https://www.jianshu.com/p/31f013df7580 大家好,好像距离上次发布博客好像又...

怪盗kidou ⋅ 05/24 ⋅ 0

Android Fragment 监听hide和show

setUserVisibleHint方法耳熟能详,可是仅仅适用于ViewPager,他是ViewPager中手动调用的,但是正常情况下我们该怎么监听呢? 我们也手动调用不就好了 上addFragment代码 private Fragment m...

qq_36523667 ⋅ 05/10 ⋅ 0

ScrollView 嵌套 ViewPager,ViewPager内容不显示问题

解决办法: 1.简单点的就是重写ViewPager //自定义ScrollView嵌套的ViewPager可显示public class ViewPagerForScrollView extends ViewPager { } 但是有个缺点是有时候几个Fragment高度一样了...

王先森oO ⋅ 05/24 ⋅ 0

想把GridView添加到ViewPager里面。报空指针异常

用TabLayout和ViewPager关联后,想把GridView添加到ViewPager里面。报空指针异常。不知道哪里写错了 04-12 08:39:37.363 25278-25278/? E/AndroidRuntime: FATAL EXCEPTION: main Process: ...

csl232 ⋅ 04/13 ⋅ 0

从零开发Android视频点播APP

第1章 课程介绍,技术选型 本章将向大家介绍本课程你们学到什么,项目功能模块有哪些,并对技术进行分解,方便大家有针对性的准备和学习,同时会将项目结构设计好,为后面项目的开发做好基础准...

13269051240 ⋅ 05/21 ⋅ 0

从零开发Android视频点播APP视频课程 点播APP实战教程

第1章 课程介绍,技术选型 本章将向大家介绍本课程你们学到什么,项目功能模块有哪些,并对技术进行分解,方便大家有针对性的准备和学习,同时会将项目结构设计好,为后面项目的开发做好基础准...

17087075817 ⋅ 05/14 ⋅ 0

图片预览组件PhotoView

图片预览组件PhotoView PhotoView是一款图片预览组件,广泛应用于大图的查看。该组件支持图片手势缩放、旋转等功能。它可以很好的和ViewPager、Picasso等组件结合,实现各种复杂的功能。...

大学霸 ⋅ 05/29 ⋅ 0

Android 平台的自定义 ViewPager - CoolViewPager

CoolViewPager是一个自定义ViewPager,具有以下功能特征: 支持水平及垂直方向循环滚动 支持自动滚动 支持自动滚动方向、滚动时间、间隔时间的设置 支持调用notifyDataSetChanged实时刷新界面 ...

幻海流心 ⋅ 06/06 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

CentOS7克隆后网卡配置问题

首先默认第一台虚拟机网卡信息为: TYPE="Ethernet" BOOTPROTO=static DEFROUTE="yes" PEERDNS="yes" PEERROUTES="yes" IPV4_FAILURE_FATAL="no" #IPV6INIT="yes" #IPV6_AUTOCONF=“yes” #I......

北岩 ⋅ 59分钟前 ⋅ 0

Guava EventBus源码解析

一、EventBus使用场景示例 Guava EventBus是事件发布/订阅框架,采用观察者模式,通过解耦发布者和订阅者简化事件(消息)的传递。这有点像简化版的MQ,除去了Broker,由EventBus托管了订阅&...

SaintTinyBoy ⋅ 今天 ⋅ 0

http怎么做自动跳转https

Apache 版本 如果需要整站跳转,则在网站的配置文件的<Directory>标签内,键入以下内容: RewriteEngine on RewriteCond %{SERVER_PORT} !^443$ RewriteRule ^(.*)?$ https://%{SERVER_NAME......

Helios51 ⋅ 今天 ⋅ 0

Python爬虫,抓取淘宝商品评论内容

作为一个资深吃货,网购各种零食是很频繁的,但是能否在浩瀚的商品库中找到合适的东西,就只能参考评论了!今天给大家分享用python做个抓取淘宝商品评论的小爬虫! 思路 我们就拿“德州扒鸡”...

python玩家 ⋅ 今天 ⋅ 0

MySQL 内核深度优化

MYSQL数据库适用场景广泛,相较于Oracle、DB2性价比更高,Web网站、日志系统、数据仓库等场景都有MYSQL用武之地,但是也存在对于事务性支持不太好(MySQL 5.5版本开始默认引擎才是InnoDB事务...

java高级架构牛人 ⋅ 今天 ⋅ 0

用户登录信息-钉子效果(基于jquery2.0)

本js效果使用jquery2.0,清晰的分解用户登录信息的(钉子效果),该效果直接用在作者网站(www.phpkhbd.com)上。 里面的难点有:定时器,延时。 大致效果如下: 一开始: 鼠标放上去的时候:...

宁哥实战课堂 ⋅ 今天 ⋅ 0

expect

官网:https://core.tcl.tk/expect/index Introduction Expect is a tool for automating interactive applications such as telnet, ftp, passwd, fsck, rlogin, tip, etc. Expect really m......

刀锋 ⋅ 今天 ⋅ 0

为什么要学习Typescript???

简单来说 目前的typescript就是未来的javascript 为什么?? 这要从ECMA-262标准的第4版说起 对了 我们说的ES5 其实是ECMAScript3.1这个替代性建议被扶正了而已... 那么 第4版标准是什么? 看看...

hang1989 ⋅ 今天 ⋅ 1

linux安装ipfs

一、下载ipfs # cd /usr/local/ipfs/ # wget https://dist.ipfs.io/go-ipfs/v0.4.15/go-ipfs_v0.4.15_linux-amd64.tar.gz # tar -zxvf go-ipfs_v0.4.15_linux-amd64.tar.gz 二、安装ipfs # ......

八戒八戒八戒 ⋅ 今天 ⋅ 0

jvm程序执行慢诊断手册

生产环境最多的几种事故之一就是程序执行慢,如果是web服务的话,表现就是响应时间长。本文分享,从业多年形成的排查守则。 诊断步骤 系统资源查看 首先是系统资源查看,而且必须是在第一步。...

xpbob ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部