Android 嵌套ViewPager实现连贯双滑动

安卓viewpager嵌套webview的滑动冲突解决 问题描述 需求是这样的,viewpager内部嵌套多个不同的网页,滑动切换显示不同html5网页,想法是好的,但是遇到了一些问题。其中html网页中也会有一些类似viewpager的可横向滑动控件,当你尝试滑动html中的有滑动效果的控件时,发现整个外部viewpager都跟着滑动了,直接切换到另一个网页,哈哈哈,好棒 解决办法 解决办法有三个,其中第一个办法最苯,第二个还可以,但是略麻烦,第三个... 阅读详情

ViewPager嵌套ViewPager后,滑动事件没法在子ViewPager里面响应。

解决办法是自定义子ViewPager。

通知他的父ViewPager现在进行的是本控件的操作,不要对我的操作进行干扰

getParent().requestDisallowInterceptTouchEvent(true);

同时实现了子ViewPager滑动到最后一个的时候,再滑动时父ViewPager会进行滑动

package com.example.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 MyViewPager extends ViewPager{
	/** 触摸时按下的点 **/
    PointF downP = new PointF();
    /** 触摸时当前的点 **/
    PointF curP = new PointF();
    
    float oldx=0.0f;
    float first=0.0f;
    OnSingleTouchListener onSingleTouchListener;
 
    public MyViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
        // TODO Auto-generated constructor stub
    }
 
    public MyViewPager(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();
            oldx=downP.x;
            first=0.0f;
            //此句代码是为了通知他的父ViewPager现在进行的是本控件的操作,不要对我的操作进行干扰
            getParent().requestDisallowInterceptTouchEvent(true);
        }
 
        if(arg0.getAction() == MotionEvent.ACTION_MOVE){
        	float newx=arg0.getX();
            int curpostion=getCurrentItem();
            int count=this.getAdapter().getCount()-1;
            
            //预测本次滑动的的方向(first>0 说明本次手势向右滑动)
            if(first==0.0f){  //第一次进来
            	if(Math.abs(newx-oldx)>0){
                	first=newx-oldx;
                }
            }
 
            //此句代码是为了通知他的父ViewPager现在进行的是本控件的操作,不要对我的操作进行干扰
            //当子viewpager的position处于0时,检测如果是向右滑动说明要通知父ViewPager滑动;
            //当子viewpager的position处于size-1时,检测如果是向左滑动说明要通知父ViewPager滑动;
            //(newx-oldx)实时检测滑动方向
            if((curpostion==count && (newx-oldx)<0 && first<0) ||(curpostion==0 && (newx-oldx)>0 &&first>0)){
                getParent().requestDisallowInterceptTouchEvent(false);
            }else{
                getParent().requestDisallowInterceptTouchEvent(true);
            }

            oldx=newx;
        }
 
        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;
    }
 
}


还有一种实现方式


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

public class ChildViewPager extends ViewPager {
	
	public ChildViewPager(Context context, AttributeSet attrs) {
		super(context, attrs);
		// TODO Auto-generated constructor stub
	}
	private float mLastMotionX;
	private boolean flag = false;

	public boolean dispatchTouchEvent(MotionEvent ev) {
		// TODO Auto-generated method stub
		final float x = ev.getX();
		switch (ev.getAction()) {
		case MotionEvent.ACTION_DOWN:
			getParent().requestDisallowInterceptTouchEvent(true);
			flag = true;
			mLastMotionX = x;
			break;
		case MotionEvent.ACTION_MOVE:
			if (flag) {
				if (x - mLastMotionX > 5 && getCurrentItem() == 0) {
					flag = false;
					getParent().requestDisallowInterceptTouchEvent(false);
				}
				if (x - mLastMotionX < -5
						&& getCurrentItem() == getAdapter().getCount() - 1) {
					flag = false;
					getParent().requestDisallowInterceptTouchEvent(false);
				}
			}
			break;
		case MotionEvent.ACTION_UP:
		case MotionEvent.ACTION_CANCEL:
			getParent().requestDisallowInterceptTouchEvent(false);
			break;
		}
		return super.dispatchTouchEvent(ev);
	}

	@Override
	public boolean onInterceptTouchEvent(MotionEvent ev) {
		// TODO Auto-generated method stub
		return super.onInterceptTouchEvent(ev);
	}

	@Override
	public boolean onTouchEvent(MotionEvent event) {
		// TODO Auto-generated method stub
		return super.onTouchEvent(event);
	}
}



            
ViewPager,ScrollView 嵌套ViewPager滑动冲突解决,安卓面试宝典 前言 这篇文章主要是分享今年上半年的面试心得,现已就职于某大厂有三个月了,近期有很多公司均已启动秋招,也祝大家在 2020 的下半年面试顺利,获得理想的offer! 之前找工作的那段时间感想颇多,总结一点面试经验和人生思考分享给大家。 看了上面三种情况,我们知道他们的共同特点是父View 和子View都想争着响应我们的触摸事件,但遗憾的是我们的触摸事件 同一时刻只能被某一个View或者ViewGroup拦截消费,所以就产生了滑动冲突?那既然同一时刻只能由某一个View或者ViewGroup消费拦截,那我们就 阅读详情

相关推荐

Android 中ViewPager嵌套RecyclerView出现滑动冲突的解决方案

应用场景: ViewPager嵌套一个RecyclerView和正常的LinearLayout布局页面,实现左右滑动效果。当左滑RecyclerView页面想要实现左右切换页面的效果,出现滑动冲突的问题。 解决方案如下: 1、自定义CustomViewPager继承自ViewPager,重写其中的onInterceptTouchEvent()拦截触摸事件方法。 /** * 自定义ViewPager,防止RecyclerView与ViewPager之间的滑动冲突 */ public class Custo

路宇的博客 9199

两种方法,教你解决 ViewPager 嵌套 ViewPager滑动冲突

当TouchEvent发生时,首先Activity将TouchEvent传递给最顶层的View,TouchEvent最先到达最顶层 view 的 dispatchTouchEvent ,然后由 dispatchTouchEvent 方法进行分发,如果dispatchTouchEvent返回true 消费事件,事件终结。如果dispatchTouchEvent返回 false ,则回传给父View的onTouchEvent事件处理;

程序员徐师兄的博客 2849

实现可滑动及动态高度调整的ScrollView嵌套ViewPager

要在中实现自定义的滑动逻辑,首先需要了解的滑动机制。是一个支持嵌套滚动的ScrollView,其自定义滑动逻辑可以通过重写其方法实现。在方法中,我们可以根据不同的滑动状态来执行特定的代码逻辑。例如,如果希望在滚动到底部时,执行一个自定义的回调函数,可以在事件处理中添加逻辑,判断滚动位置是否已经到底部,并在滚动停止时(ACTION_UP)触发回调。

weixin_42515842的博客 1061

Android-ViewPager嵌套使用探究

ViewPager的嵌套使用是一个很常见的问题,然而,最近又一次遇到ViewPager的嵌套使用问题。情景是这样的,需求上给出了这样的要求,需要实现内外两个ViewPager嵌套的效果,外部ViewPager控制着4个Tab的切换滑动,内部ViewPager控制着若干个二级Tab的滑动切换(这里可能是广告栏,也可能是榜单等),另外,当内部ViewPager滑动到最左或者最右的时候,外部ViewPager恢复滑动。需求刚一看的时候,确实不难,于是我立马想出了方案一。解决两个ViewPager滑动冲突问题,首先

eeeeety6208的博客 2434

Android Fragment嵌套ViewPager,ViewPager嵌套多个Fragment

Android Fragment嵌套ViewPager,ViewPager嵌套多个Fragment,Fragment的多层嵌套。csdn博客讲解地址:http://blog.youkuaiyun.com/qq_24956515/article/details/50990506

Android 实现联动ViewPager。两个ViewPage实现同步滑动~ 源码

联动ViewPager的意思就是当一个viewpager在滑动的时候,另外一个ViewPager也跟着滑动,而且两者是同步的。

Android开发笔记-Viewpager(2)的双联动效果

ViewPager(2)双联动效果 为了满足伸手党的需求,先贴上代码 源码 BaseLinkPageChangeListener.java public class BaseLinkPageChangeListener implements ViewPager.OnPageChangeListener { private final ViewPager linkViewPager; private final ViewPager selfViewPager; privat

qq_40709911的博客 4011

完美解决ViewPager两层嵌套滑动问题

重写了子viewpager的方法,Childviewpager继承了viewpager。解决了父viewpager不能滑动或者子viewpager不能滑动问题。修改了事件的分发。可以使子viewpager滑动到最后一页后直接滑入父viewpager的fragment。修改子viewpager可参考local.xml 。

Android问题笔记三十六:ViewPager嵌套RecyclerView,降低ViewPager灵敏度

有个需求是ViewPager嵌套了RecyclerView,如果你稍微操作一下就会发现,有少许的横向滑动就会造成 ViewPager 的滑动切换。 尤其是 RecyclerView 是横向滑动的时候。 这点体验很不好,所以可以降低灵敏度。 进而实现轻微横向滑动是 RecyclerView 大幅横向滑动是 ViewPager

空名先生 772

基础的pdf病毒木马

基础的pdf病毒木马 环境: 攻击机:Kali 目标操作系统:Windows 10或Windows 7 (关闭防火墙和安全软件) 目标软件:Adobe Reader 8.1.2 msf框架搜索:adobe-pdf 1.打开msfconsole 2.搜索 adobe_pdf模块 3.加载攻击模块并设置payload 4.运行生成pdf 5.将pdf拖入到win10 6.打开msf,加...

小小猪的博客 4623

[cadence]Allegro STEP-3D模型导入、匹配、导出的方法及注意事项

如果 Avaliable里面没有和symbols对应的文件,说明没有对应的3D模型,这时候需要在你的step路径下创建y与 .dra 封装文件相同名称的。选择好 Output file 和 name 之后呢,点击 Export。首先打开Setup - Step Package Mapping。注意:路径中不能有中文名称,有的话你会发现不能导出,也不会报错。在路径下将下载或者自己做的 3D模型文件改名之后,重新打开。可在View -> 3D View。

LuDvei的博客 2万+

Android开发中在ViewPager2中嵌套ViewPager2出现滑动问题的解决(文章内包含本人解决问题的经过)

分享本人发现问题以及解决问题的经过和问题的解决方法,希望能帮助到大家。

主要是学习笔记和一些学习心得~ 2901

Doris副本修复实战:从状态机到手动修复的完整指南

在分布式数据库系统中,多副本机制是实现高可用与数据一致性的核心技术。其原理是通过在不同节点存储数据的多个拷贝,确保部分节点故障时服务仍可继续。这项技术的核心价值在于保障数据可靠性,并支撑在线分析处理(OLAP)等对数据一致性要求高的应用场景。当副本出现损坏、丢失或版本不一致时,系统通常依赖自动修复机制,但在元数据损坏、多副本同时故障等复杂场景下,自动修复可能失效,需要深入理解副本状态机并借助手动工具介入。本文将聚焦Doris数据库,解析Tablet副本状态流转(如BAD、VERSION_ERROR),并详细

weixin_32288959的博客 457

NestedScrollView嵌套Tablayout+ViewPager嵌套Fragment嵌套Recyclerview不显示,显示不全,不能滑动,部分滑动,滑动冲突的各种问题集合

NestedScrollView嵌套Tablayout+ViewPager嵌套Fragment嵌套Recyclerview 在实际操作中,会出现不显示,显示不全,不能滑动,部分滑动,滑动冲突等各种问题,本文就这些问题使用最简单的方法来解决 1,使用NestedScrollView后viewPager不显示,显示不全的解决方案: 增加属性android:fillViewport="tru...

panshi5188的博客 5428

Spring Boot:如何快速搭建一个高性能微服务架构?

通过本文的详细步骤,我们成功搭建了一个高性能的微服务架构。Spring Boot 和 Spring Cloud 提供了强大的工具链,使得开发者能够快速实现服务注册与发现、负载均衡、熔断器与降级机制等功能。同时,通过数据库连接池、Redis 缓存和异步处理等优化手段,进一步提升了系统的性能和可靠性。希望本文能够帮助你快速入门 Spring Boot 微服务架构的搭建,并为实际项目提供参考。如果你有任何问题或建议,欢迎在评论区留言!

shrgegrb的博客 1013

Cesium功能集(十二):Cesium中流体仿真

【代码】Cesium功能集(十二):Cesium中流体仿真。

GIS肆月 600

Android 中解决ViewPager嵌套RecyclerView滑动冲突

思路 最近在项目中遇到这样一个需求:某个页面中有4个Fragment,使用的是viewpager实现的,在某个fragment中又有一个横向滑动的Recyclerview,当时心想,这个需求也不难啊,咔咔一顿响需求实现了,结果发现横向滑动Recyclerview时直接触发了外层ViewPager的滑动,滑动到下一个Fragment了,直接懵逼了,剧情不是这样的啊,然后一顿咔咔百度,发现还是有各种各...

g312678的博客 8159

Linux(31)Rockchip RK3568 Ubuntu22.04上部署 Docker: 问题与解决方案

本博客在总结这些问题及其解决方案,为遇到类似问题的兄弟提供参考,如果我后续有碰到其他Docker 问题也会在此更新补充。

我其实什么都不会 1645

android滑动组件嵌套一般思路,多任务手势思路,触摸传递思路,【例】listview嵌套viewpager

在android UI开发中,我们经常会遇到这种需求: 两个支持滑动的组件,比如listview嵌套多个listview,listview的item是一个viewpager或gallary?亦或是scrollview嵌套scrollview等等。 本文介绍了设计嵌套滑动组件的一般思路和常见问题,希望能够帮助想要做类似开发的开发者。

1万+

I2C通信——时序图

本文用逻辑分析仪抓取主机I2C通信的时序图,抓取的过程是读某个寄存器的值。

weixin_43772611的博客 7353

【C++】【STL算法】数据窄化及代码安全性

本文系统探讨了C++工程中数据窄化(narrowing conversion)的隐患与解决方案。数据窄化指将高精度/大范围类型转换为低精度/小范围类型,虽语法合法但会导致静默精度损失。其危险性体现在:错误隐蔽、STL会放大问题、数值错误具有传播性。现代C++要求窄化必须显式声明,文中提出四种工程解决方案:显式转换、边界统一转换、范围检查转换和使用GSL工具。建议在系统边界集中处理窄化,保持计算链路类型一致性,并通过分层策略(建模用double,控制用float)确保数值稳定性。核心思想是让窄化成为清晰可控的

Double Galaxy 79

解决ViewPager嵌套ViewPager滑动冲突的事件分发问题

AndroidTouch事件:(简单做个了解) dispatchTouchEvent()事件分发 默认返回false,不做处理继续分发事件,返回true,做处理不分发事件 onInterceptTouchEvent()事件拦截 默认返回false,不做处理继续执行,返回true,做处理拦截事件 onTouchEvent事件消费 默认返回false,不做处理继续传递,返回true,做处理终止...

_万能的博哥的博客 2834

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Android之viewPager嵌套viewPager无法滑动子viewPager

现在最头疼的事就是需求不明确,这不,有遇到你个奇葩需求,父viewPager总共有三个选项卡,第一个选项卡里嵌入一个子viewPager,这时候问题就来了,子viewPager无法滑动,我猜的事父viewPager把子viewPager拦截了,于是尝试了下面的第一种方法 1.重写父viewPager的onInterceptTouchEvent方法 /** * @author 子墨 *

子墨博客 3995

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

如何用ConsecutiveScrollerLayout解决RecyclerView、ViewPager嵌套滑动难题

还在为Android开发中的复杂滑动冲突而烦恼吗?🤔 RecyclerView、ViewPager、WebView等滑动控件嵌套使用时,常常出现卡顿、滑动不连贯的问题。今天给大家介绍一款强大的Android滑动容器——ConsecutiveScrollerLayout,它能完美解决这些嵌套滑动难题!✨ ConsecutiveScrollerLayout是一个支持多个滑动布局和普通控件持续连贯滑

gitblog_00993的博客 775

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

ViewPager2 嵌套后的滑动冲突解决方案 | 官方认证

我赌一包辣条 | 作者承香墨影(ID:cxmyDev)| 校对https://juejin.cn/post/6911456860533063688 | 原文Hi,大家好,这里是承香墨影!V...

承香墨影的博客 9566

RecyclerView嵌套ViewPager滑动冲突

将ViewPager替换如下: public class RecycleViewPager extends ViewPager { private Context mContext; public RecycleViewPager(Context context) { super(context); this.mContext = context; fixTouchSlop(); } public RecycleViewPag

weixin_39592302的博客 1123
上一篇: window 下 利用gradle编译volley源代码
下一篇: Android TV开发经验总结---初识TV开发
Derbe
博客等级 码龄15年 27粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值