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

相关文章

hdu1254(嵌套bfs,两次bfs)

/*第一次做这种题感觉很有压力,思路还是有点混乱,总是wa,改了好多次才ac的思路:把箱子的移动当做第一层bfs,队列节点要用到当前箱子坐标(x,y),走的次数step,当前人的weizhi(man_x,man_y),要判断人能否将箱子推到某点时要嵌套第二层bfs(人的移动);代码如下:

zeroclipboard 粘贴板的应用示例, 兼容 Chrome、IE等多浏览器

zeroclipboard单个复制按钮和多个复制按钮的实现方法 最近网站改版想让复制代码功能在多个浏览器上都可以实现,最近看网上不少说我们的代码复制功能不好用的,我们最近将会增加代码高亮等功能,希望大家多多支持我们 zeroclipboard是一个跨浏览器的库类 它利用 Flash 进行复制,所以只要浏览器装有 Flash 就可以运行,而且比 IE 的

专题二_滑动窗口_算法专题详细总结

目录 滑动窗口,引入: 滑动窗口,本质:就是同向双指针; 1.⻓度最⼩的⼦数组(medium) 1.解析:给我们一个数组nums,要我们找出最小子数组的和==target,首先想到的就是暴力解法 1)暴力: 2)优化,滑动窗口: 1.进窗口 2.出窗口 3.更新值 2.⽆重复字符的最⻓⼦串(medium) 1)仍然是暴力解法: 2)优化: 进窗口:hash[s[rig

你的应用与Solaris 11兼容吗?

用户现在可以下载开发者预览版的Solaris 11,它内置在名为Solaris 11 Express的软件产品中,甲骨文已在去年11月发布了该产品。如今,甲骨文发布了一款新的甲骨文Solaris 11兼容性检查工具(Oracle Solaris 11 Compatibility Checker Tool),加强了Solaris 11方面的开发工作。对于甲骨文和Solaris的用户来说,这是重

ViewPager+fragment实现切换页面(一)

如今的很多应用中都是下面有一排按钮,点击可以切换页面,滑动也可以切换页面。下面就来简单的实现这个功能。 思路 首先肯定是会用到viewpager这个控件,为了能够向下兼容,最好用v4包下的viewpager,Activity要继承FragmentActivity 其次用一个集合来存储所有的fragment页面在设置viewpager的适配器时,把存储fragment页面的list集合传入ada

hot100刷题第1-9题,三个专题哈希,双指针,滑动窗口

求满足条件的子数组,一般是前缀和、滑动窗口,经常结合哈希表; 区间操作元素,一般是前缀和、差分数组 数组有序,更大概率会用到二分搜索 目前已经掌握一些基本套路,重零刷起leetcode hot 100, 套路题按套路来,非套路题适当参考gpt解法。 一、梦开始的地方, 两数之和 class Solution:#注意要返回的是数组下标def twoSum(self, nums: Lis

Cortex-A7:ARM官方推荐的嵌套中断实现机制

0 参考资料 ARM Cortex-A(armV7)编程手册V4.0.pdf ARM体系结构与编程第2版 1 前言 Cortex-M系列内核MCU中断硬件原生支持嵌套中断,开发者不需要为了实现嵌套中断而进行额外的工作。但在Cortex-A7中,硬件原生是不支持嵌套中断的,这从Cortex-A7中断向量表中仅为外部中断设置了一个中断向量可以看出。本文介绍ARM官方推荐使用的嵌套中断实现机

关于iReport5.6.0无法正常启动或者闪退或者JDK8不兼容的解决方案

我下载了iReport5.6.0 版本的,启动不起来;jdk 1.8 下载iReport5.6.0地址:https://download.csdn.net/download/u013456370/10589765 参考链接:https://blog.csdn.net/erlian1992/article/details/76359191?locationNum=6&fps=1 如果是停留在这

三维布尔运算对不规范几何数据的兼容处理

1.前言 上一篇文章谈过八叉树布尔运算,对于规范几何数据的情况是没有问题的。 在实际情况中,由于几何数据来源不一,处理和生成方式不一,我们无法保证进行布尔运算的几何数据都是规范的,对于不规范情况有时候也有需求,这就需要兼容不规范数据情况,当然这种兼容不是一味的让步,而是对于存在有限的不规范数据的兼容处理。 2.原始数据示例 下图是一个大坝模型和之上要对其进行布尔运算的立方体。 大坝模型由

安卓中的fragment与viewPager的使用问题的解决

最近使用viewPager,结合fragment使用,发现fragment的周期将不符合他的原有的周期流程,多个fragment将会产生错位问题。       通过研究相关代码,发现fragment的切换实际调用的函数为setUserVisibleHint,通过在其中重写方法,将会达到fragment正确切换的效果。       public void setUserVisible