ViewPager嵌套(内层ViewPager可以滑动之父类兼容listView)

2023-10-19 07:48

本文主要是介绍ViewPager嵌套(内层ViewPager可以滑动之父类兼容listView),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

package com.peopledailychina.activity.widget;

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

/**
 * viewpage listview 相互冲突 将父view 传递到viewpage 里面 使用父类的方法
 * parent.requestDisallowInterceptTouchEvent(true);  * requestDisallowInterceptTouchEvent 如果为true的时候 表示:view 不拦截子viewtouch 事件
 * 这个方法只是改变flag
 */
public class FinalViewPager extends ViewPager {private ViewGroup parent;

    private float startX;
    private float startY;
    private float lastX;
    private float lastY;
    private float endX;
    private float endY;
    public boolean isFixTouch = true;

    enum Orientation {VERTICAL, HORIZONTAL;
    }public FinalViewPager(Context context) {super(context);
        // TODO Auto-generated constructor stub
    }public FinalViewPager(Context context, AttributeSet attrs) {super(context, attrs);
    }@Override
    protected void onAttachedToWindow() {// TODO Auto-generated method stub
        super.onAttachedToWindow();
        this.parent = (ViewGroup) getParent();
    }public void setNestedpParent(ViewGroup parent) {this.parent = parent;
    }@Override
    public boolean dispatchTouchEvent(MotionEvent ev) {if (isFixTouch) {if (parent == null) {return super.dispatchTouchEvent(ev);
            }float x = ev.getX();
            float y = ev.getY();

            switch (ev.getAction()) {case MotionEvent.ACTION_DOWN:parent.requestDisallowInterceptTouchEvent(true);
                    break;
                case MotionEvent.ACTION_MOVE:float moveX = x - lastX;
                    float moveY = y - lastY;
                    if (Math.abs(moveX) / Math.abs(moveY) > 1) {parent.requestDisallowInterceptTouchEvent(true);
                    } else {parent.requestDisallowInterceptTouchEvent(false);
                    }break;
                case MotionEvent.ACTION_UP:case MotionEvent.ACTION_CANCEL:break;
                default:break;
            }lastX = x;
            lastY = y;
        }return super.dispatchTouchEvent(ev);
    }public boolean isFixTouch() {return isFixTouch;
    }public void setFixTouch(boolean fixTouch) {isFixTouch = fixTouch;
    }
// @Override
    // public boolean onTouchEvent(MotionEvent arg0) {
    // // TODO Auto-generated method stub
    // switch (arg0.getAction()) {
    // case MotionEvent.ACTION_UP:
    // case MotionEvent.ACTION_CANCEL:
    // return true;
    // default:
    // break;
    // }
    // return super.onTouchEvent(arg0);
    // }

    private Orientation getScrollOrientation(MotionEvent ev) {switch (ev.getAction()) {case MotionEvent.ACTION_DOWN:startX = ev.getX();
                startY = ev.getY();

                break;
            case MotionEvent.ACTION_MOVE:float moveX = ev.getX() - startX;
                float moveY = ev.getY() - startY;
                if (Math.abs(moveX) >= Math.abs(moveY)) {return Orientation.HORIZONTAL;
                }break;
            case MotionEvent.ACTION_UP:startX = 0;
                startY = 0;

                break;
            default:break;
        }return Orientation.VERTICAL;
    }
}

这篇关于ViewPager嵌套(内层ViewPager可以滑动之父类兼容listView)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/238379

相关文章

Python中将嵌套列表扁平化的多种实现方法

《Python中将嵌套列表扁平化的多种实现方法》在Python编程中,我们常常会遇到需要将嵌套列表(即列表中包含列表)转换为一个一维的扁平列表的需求,本文将给大家介绍了多种实现这一目标的方法,需要的朋... 目录python中将嵌套列表扁平化的方法技术背景实现步骤1. 使用嵌套列表推导式2. 使用itert

MyBatis编写嵌套子查询的动态SQL实践详解

《MyBatis编写嵌套子查询的动态SQL实践详解》在Java生态中,MyBatis作为一款优秀的ORM框架,广泛应用于数据库操作,本文将深入探讨如何在MyBatis中编写嵌套子查询的动态SQL,并结... 目录一、Myhttp://www.chinasem.cnBATis动态SQL的核心优势1. 灵活性与可

Mybatis嵌套子查询动态SQL编写实践

《Mybatis嵌套子查询动态SQL编写实践》:本文主要介绍Mybatis嵌套子查询动态SQL编写方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、实体类1、主类2、子类二、Mapper三、XML四、详解总结前言MyBATis的xml文件编写动态SQL

使用Python开发Markdown兼容公式格式转换工具

《使用Python开发Markdown兼容公式格式转换工具》在技术写作中我们经常遇到公式格式问题,例如MathML无法显示,LaTeX格式错乱等,所以本文我们将使用Python开发Markdown兼容... 目录一、工具背景二、环境配置(Windows 10/11)1. 创建conda环境2. 获取XSLT

基于Python实现读取嵌套压缩包下文件的方法

《基于Python实现读取嵌套压缩包下文件的方法》工作中遇到的问题,需要用Python实现嵌套压缩包下文件读取,本文给大家介绍了详细的解决方法,并有相关的代码示例供大家参考,需要的朋友可以参考下... 目录思路完整代码代码优化思路打开外层zip压缩包并遍历文件:使用with zipfile.ZipFil

python展开嵌套列表的多种方法

《python展开嵌套列表的多种方法》本文主要介绍了python展开嵌套列表的多种方法,包括for循环、列表推导式和sum函数三种方法,具有一定的参考价值,感兴趣的可以了解一下... 目录一、嵌套列表格式二、嵌套列表展开方法(一)for循环(1)for循环+append()(2)for循环+pyPhWiFd

Java嵌套for循环优化方案分享

《Java嵌套for循环优化方案分享》介绍了Java中嵌套for循环的优化方法,包括减少循环次数、合并循环、使用更高效的数据结构、并行处理、预处理和缓存、算法优化、尽量减少对象创建以及本地变量优化,通... 目录Java 嵌套 for 循环优化方案1. 减少循环次数2. 合并循环3. 使用更高效的数据结构4

Spring常见错误之Web嵌套对象校验失效解决办法

《Spring常见错误之Web嵌套对象校验失效解决办法》:本文主要介绍Spring常见错误之Web嵌套对象校验失效解决的相关资料,通过在Phone对象上添加@Valid注解,问题得以解决,需要的朋... 目录问题复现案例解析问题修正总结  问题复现当开发一个学籍管理系统时,我们会提供了一个 API 接口去

SpringBoot嵌套事务详解及失效解决方案

《SpringBoot嵌套事务详解及失效解决方案》在复杂的业务场景中,嵌套事务可以帮助我们更加精细地控制数据的一致性,然而,在SpringBoot中,如果嵌套事务的配置不当,可能会导致事务不生效的问题... 目录什么是嵌套事务?嵌套事务失效的原因核心问题:嵌套事务的解决方案方案一:将嵌套事务方法提取到独立类

基于Redis有序集合实现滑动窗口限流的步骤

《基于Redis有序集合实现滑动窗口限流的步骤》滑动窗口算法是一种基于时间窗口的限流算法,通过动态地滑动窗口,可以动态调整限流的速率,Redis有序集合可以用来实现滑动窗口限流,本文介绍基于Redis... 滑动窗口算法是一种基于时间窗口的限流算法,它将时间划分为若干个固定大小的窗口,每个窗口内记录了该时间