ViewPager在ScrollView中无法正常滑动的问题

简介:

来源:

能够兼容ViewPager的ScrollView http://justwyy.iteye.com/blog/1567390

ScrollView中嵌入ViewPager,ViewPager的滑动出现问题  http://bbs.csdn.net/topics/390213480


在网上找到两种方法,都是自定义scrollview,大家可以试试。

方法一:

public class CustomScrollView extends ScrollView {
    private boolean canScroll;

    private GestureDetector mGestureDetector;
    View.OnTouchListener mGestureListener;

    public CustomScrollView(Context context, AttributeSet attrs) {
        super(context, attrs);
        mGestureDetector = new GestureDetector(new YScrollDetector());
        canScroll = true;
    }
    
    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        if(ev.getAction() == MotionEvent.ACTION_UP)
            canScroll = true;
        return super.onInterceptTouchEvent(ev) && mGestureDetector.onTouchEvent(ev);
    }

    class YScrollDetector extends SimpleOnGestureListener {
        @Override
        public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
            if(canScroll)
                if (Math.abs(distanceY) >= Math.abs(distanceX))
                    canScroll = true;
                else
                    canScroll = false;
            return canScroll;
        }
    }
}

方法二:

public class CustomScrollView extends ScrollView {
    // 滑动距离及坐标  
    private float xDistance, yDistance, xLast, yLast;  

    public CustomScrollView(Context context, AttributeSet attrs) {  
        super(context, attrs);  
    }  

    @Override  
    public boolean onInterceptTouchEvent(MotionEvent ev) {  
        switch (ev.getAction()) {  
            case MotionEvent.ACTION_DOWN:  
                xDistance = yDistance = 0f;  
                xLast = ev.getX();  
                yLast = ev.getY();  
                break;  
            case MotionEvent.ACTION_MOVE:  
                final float curX = ev.getX();  
                final float curY = ev.getY();  

                xDistance += Math.abs(curX - xLast);  
                yDistance += Math.abs(curY - yLast);  
                xLast = curX;  
                yLast = curY;  

                if(xDistance > yDistance){  
                    return false;  
                }    
        }  

        return super.onInterceptTouchEvent(ev);  
    }  
}


相关文章
|
编译器 C++
Destructor
Destructor(析构函数)是一种在 C++编程语言中用于清理对象资源的特殊成员函数。当一个对象被销毁时,编译器会自动调用析构函数,以释放对象占用的资源(如内存、文件句柄等)。
178 1
|
存储 文件存储 对象存储
S3存储服务间数据同步工具Rclone迁移教程
目前大多项目我们都会使用各种存储服务,例如oss、cos、minio等。当然,因各种原因,可能需要在不同存储服务间进行数据迁移工作,所以今天就给大家介绍一个比较通用的数据迁移工具Rclone。
S3存储服务间数据同步工具Rclone迁移教程
|
Java 开发者
Java“NoSuchElementException”问题解决
“NoSuchElementException”是Java编程中常见的异常之一,通常发生在尝试从集合或迭代器中获取不存在的元素时。本文将介绍该异常的原因、常见场景及解决方法,帮助开发者有效应对这一问题。
942 5
|
11月前
|
数据可视化 搜索推荐 项目管理
深度剖析:如何精准定位年度总结的核心价值
在快速变化的职场中,年度总结不仅是个人成长的回顾,也是团队绩效评估和未来规划的重要依据。本文从专业角度出发,结合实践策略,指导您如何撰写高质量的年度总结,涵盖明确目的、结构化布局、数据驱动、高效工具推荐、语言与格式优化等方面,帮助您清晰展现过去一年的成就、挑战、学习与成长,并为未来设定明确方向。
|
机器学习/深度学习 人工智能 自然语言处理
Transformer图解以及相关的概念解析
前言 transformer是目前NLP甚至是整个深度学习领域不能不提到的框架,同时大部分LLM也是使用其进行训练生成模型,所以transformer几乎是目前每一个机器人开发者或者人工智能开发者不能越过的一个框架。接下来本文将从顶层往下去一步步掀开transformer的面纱。 transformer概述 Transformer模型来自论文Attention Is All You Need。 在论文中最初是为了提高机器翻译的效率,它使用了Self-Attention机制和Position Encoding去替代RNN。后来大家发现Self-Attention的效果很好,并且在其它的地
501 9
|
小程序 安全 数据库连接
为什么已经提交的小程序无法连接后台服务?
【10月更文挑战第17天】为什么已经提交的小程序无法连接后台服务?
1255 0
|
传感器 数据采集 人工智能
传感器架构及原理(一)
传感器架构及原理(一)
499 1
|
机器学习/深度学习 Java 数据挖掘
Weka简单介绍与最新详细简单安装以及环境变量配置
Weka简单介绍与最新详细简单安装以及环境变量配置
1800 0
Weka简单介绍与最新详细简单安装以及环境变量配置
|
关系型数据库 MySQL 项目管理
项目管理和缺陷跟踪系统 Redmine
Redmine 是用 Ruby 开发的基于 web 的项目管理软件,是用 ROR 框架开发的一套跨平台项目管理系统,支持多种数据库,有不少自己独特的功能,例如提供 wiki、新闻台等。还可以集成其他版本管理系统和 BUG 跟踪系统;例如 SVN、CVS、TD 等。这种 Web 形式的项目管理系统通过项目(Project)的形式把成员、任务(问题)、文档、讨论以及各种形式的资源组织在一起,项目成员参与更新任务、文档等内容来推动项目。
652 0
项目管理和缺陷跟踪系统 Redmine