PullToRefreshListView中嵌套ViewPager滑动冲突的解决

PullToRefreshListView中嵌套ViewPager滑动冲突的解决

最近恰好遇到PullToRefreshListView中需要嵌套ViewPager的情况,ViewPager 作为头部添加到ListView中,发先ViewPager在滑动过程中流畅性太差几乎很难左右滑动。在网上也看了很多大神的介绍,看了ViewPager的源码。其实思路很简单,只不过没有看到有教完整的说明,为了帮转像我这样的green hand 少走弯路,将过程整理下。大神自动略过~_~:

滑动冲突的解决大概要处理的问题无非是事件分发,事件拦截,和事件的处理,关于这部分内容大家可以在网上查看相关的资料,基本原理比较容易理解。有了这部分内容做铺垫。下面正式进入正题。

解决这个问题有两种实现方式

一 首先采取了给ViewPager设置监听的方式

vPager.setOnPageChangeListener(new OnPageChangeListener() {@Overridepublic void onPageSelected(int arg0) {//该方法是ViewPager滑动结束后,页面别选定后调用此方法/*在ViewPager滑动结束后需要通知父容器(ListView)可以* 对后续的事件进行适当的处理了(包括自身事件的拦截)*/lsv.requestDisallowInterceptTouchEvent(false);}@Overridepublic void onPageScrolled(int arg0, float arg1, int arg2) {//该方法是ViewPager滑动时调用此方法/*在ViewPager滑动时需要通知父容器(ListView)不要拦截,也就是说此事件交给ViewPager处理*/lsv.requestDisallowInterceptTouchEvent(true);   }@Overridepublic void onPageScrollStateChanged(int arg0) {//该方法是ViewPager滑动状态发生变化时调用此方法//这里暂时不要进行相关的操作。
            }
});

 



这种方式可以解决ViewPager左右滑动与listView的冲突问题,但是会有一个问题,此时在VIewPager上的下拉事件也被ViewPager接收,只能在ViewPager下边下拉才能实现PullToRefreshListView 的下拉刷新效果。 

这里写图片描述

如果不需要下拉刷新,普通的ListView 通过上面的方式完全可以达到预期的效果

二 重写ViewPager的disPatchTouchEvent方法

基本思路就是要重写ViewPager的disPatchTouchEvent方法,通过比较x、y轴的移动距离,决定事件是否自己进行处理。

package com.ccq.tuangou.myview;import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.MotionEvent;public class MyViewPager extends ViewPager {float mDownX;float mDownY;public MyViewPager(Context context, AttributeSet attrs) {super(context, attrs);}@Overridepublic boolean dispatchTouchEvent(MotionEvent ev) {switch (ev.getAction()) {case MotionEvent.ACTION_DOWN://DOWN 事件的时候记录下当前的xy左标mDownX=ev.getX();mDownY=ev.getY();getParent().requestDisallowInterceptTouchEvent(true);break;case MotionEvent.ACTION_MOVE:/*MOVE 事件后计算x轴y轴的移动距离 ,如果x轴移动距离大于y轴,那么该事件有ViewPager处理,否则交给父容器处理*/if(Math.abs(ev.getX()-mDownX)>Math.abs(ev.getY()-mDownY)){getParent().requestDisallowInterceptTouchEvent(true);}else{getParent().requestDisallowInterceptTouchEvent(false);}break;case MotionEvent.ACTION_CANCEL:getParent().requestDisallowInterceptTouchEvent(false);break;default:break;}return super.dispatchTouchEvent(ev);}
}

 

转载于:https://www.cnblogs.com/zhujiabin/p/7326553.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/391723.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

神经网络 卷积神经网络_如何愚弄神经网络?

神经网络 卷积神经网络Imagine you’re in the year 2050 and you’re on your way to work in a self-driving car (probably). Suddenly, you realize your car is cruising at 100KMPH on a busy road after passing through a cross lane and you don’t know why.想象一下…

数据特征分析-分布分析

分布分析用于研究数据的分布特征,常用分析方法: 1、极差 2、频率分布 3、分组组距及组数 df pd.DataFrame({编码:[001,002,003,004,005,006,007,008,009,010,011,012,013,014,015],\小区:[A村,B村,C村,D村,E村,A村,B村,C村,D村,E村,A村,B村,C村,D村,E村…

开发工具总结(2)之全面总结Android Studio2.X的填坑指南

前言:好多 Android 开发者都在说Android Studio太坑了,老是出错,导致开发进度变慢,出错了又不知道怎么办,网上去查各种解决方案五花八门,有些可以解决问题,有些就是转来转去的写的很粗糙&#x…

无聊的一天_一人互联网公司背后的无聊技术

无聊的一天Listen Notes is a podcast search engine and database. The technology behind Listen Notes is actually very very boring. No AI, no deep learning, no blockchain. “Any man who must say I am using AI is not using True AI” :)Listen Notes是一个播客搜索…

如何在Pandas中使用Excel文件

From what I have seen so far, CSV seems to be the most popular format to store data among data scientists. And that’s understandable, it gets the job done and it’s a quite simple format; in Python, even without any library, one can build a simple CSV par…

Js实现div随鼠标移动的方法

HTML: <div id"odiv" style" COLOR: #666; padding: 2px 8px; FONT-SIZE: 12px; MARGIN-RIGHT: 5px; position: absolute; background: #fff; display: block; border: 1px solid #666; top: 50px; left: 10px;"> Move_Me</div>第一种&…

leetcode 867. 转置矩阵

给你一个二维整数数组 matrix&#xff0c; 返回 matrix 的 转置矩阵 。 矩阵的 转置 是指将矩阵的主对角线翻转&#xff0c;交换矩阵的行索引与列索引。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]] 输出&#xff1a;[[1,4,7],[2,5,8],[3,6,9]] …

数据特征分析-对比分析

对比分析是对两个互相联系的指标进行比较。 绝对数比较(相减)&#xff1a;指标在量级上不能差别过大&#xff0c;常用折线图、柱状图 相对数比较(相除)&#xff1a;结构分析、比例分析、空间比较分析、动态对比分析 df pd.DataFrame(np.random.rand(30,2)*1000,columns[A_sale…

Linux基线合规检查中各文件的作用及配置脚本

1./etc/motd 操作&#xff1a;echo " Authorized users only. All activity may be monitored and reported " > /etc/motd 效果&#xff1a;telnet和ssh登录后的输出信息 2. /etc/issue和/etc/issue.net 操作&#xff1a;echo " Authorized users only. All…

tableau使用_使用Tableau升级Kaplan-Meier曲线

tableau使用In a previous article, I showed how we can create the Kaplan-Meier curves using Python. As much as I love Python and writing code, there might be some alternative approaches with their unique set of benefits. Enter Tableau!在上一篇文章中 &#x…

踩坑 net core

webclient 可以替换为 HttpClient 下载获取url的内容&#xff1a; 证书&#xff1a; https://stackoverflow.com/questions/40014047/add-client-certificate-to-net-core-httpclient 转载于:https://www.cnblogs.com/zxs-onestar/p/7340386.html

我从参加#PerfMatters会议中学到的东西

by Stacey Tay通过史黛西泰 我从参加#PerfMatters会议中学到的东西 (What I learned from attending the #PerfMatters conference) 从前端的网络运行情况发布会上的注意事项 (Notes from a front-end web performance conference) This week I had the privilege of attendin…

修改innodb_flush_log_at_trx_commit参数提升insert性能

最近&#xff0c;在一个系统的慢查询日志里发现有个insert操作很慢&#xff0c;达到秒级&#xff0c;并且是比较简单的SQL语句&#xff0c;把语句拿出来到mysql中直接执行&#xff0c;速度却很快。 这种问题一般不是SQL语句本身的问题&#xff0c;而是在具体的应用环境中&#…

leetcode 1178. 猜字谜(位运算)

外国友人仿照中国字谜设计了一个英文版猜字谜小游戏&#xff0c;请你来猜猜看吧。 字谜的迷面 puzzle 按字符串形式给出&#xff0c;如果一个单词 word 符合下面两个条件&#xff0c;那么它就可以算作谜底&#xff1a; 单词 word 中包含谜面 puzzle 的第一个字母。 单词 word…

Nexus3.x.x上传第三方jar

exus3.x.x上传第三方jar&#xff1a; 1. create repository 选择maven2(hosted)&#xff0c;说明&#xff1a; proxy&#xff1a;即你可以设置代理&#xff0c;设置了代理之后&#xff0c;在你的nexus中找不到的依赖就会去配置的代理的地址中找hosted&#xff1a;你可以上传你自…

责备的近义词_考试结果危机:我们应该责备算法吗?

责备的近义词I’ve been considering writing on the topic of algorithms for a little while, but with the Exam Results Fiasco dominating the headline news in the UK during the past week, I felt that now is the time to look more closely into the subject.我一直…

电脑如何设置终端设置代理_如何设置一个严肃的Kubernetes终端

电脑如何设置终端设置代理by Chris Cooney克里斯库尼(Chris Cooney) 如何设置一个严肃的Kubernetes终端 (How to set up a serious Kubernetes terminal) 所有k8s书呆子需要的CLI工具 (All the CLI tools a growing k8s nerd needs) Kubernetes comes pre-packaged with an ou…

spring cloud(二)

1. Feign应用 Feign的作用&#xff1b;使用Feign实现consumer-demo代码中调用服务 导入启动器依赖&#xff1b;开启Feign功能&#xff1b;编写Feign客户端&#xff1b;编写一个处理器ConsumerFeignController&#xff0c;注入Feign客户端并使用&#xff1b;测试 <dependen…

c/c++编译器的安装

MinGW(Minimalist GNU For Windows)是个精简的Windows平台C/C、ADA及Fortran编译器&#xff0c;相比Cygwin而言&#xff0c;体积要小很多&#xff0c;使用较为方便。 MinGW最大的特点就是编译出来的可执行文件能够独立在Windows上运行。 MinGW的组成&#xff1a; 编译器(支持C、…

渗透工具

渗透工具 https://blog.csdn.net/Fly_hps/article/details/89306104 查询工具 https://blog.csdn.net/Fly_hps/article/details/89070552 转载于:https://www.cnblogs.com/liuYGoo/p/11347693.html