- 浏览: 1228361 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (353)
- java基础 (40)
- tapestry (16)
- gwt (14)
- ajax (7)
- linux (8)
- ubuntu (18)
- eclipse (6)
- dojo (2)
- javascript (7)
- maven (4)
- 日常生活 (29)
- web2.0 (2)
- jsonrpc (1)
- compass (1)
- lucene (0)
- spring (10)
- cluster (3)
- 数据结构 (2)
- sqlserver (1)
- tomcat (2)
- swing (1)
- servlet (1)
- hibernate (1)
- firefox (1)
- Java-Puzzlers (1)
- Wicket (2)
- mysql (10)
- windows (5)
- Webwork (1)
- struts2 (1)
- Seam (2)
- jboss (1)
- idea (6)
- 分布计算 (3)
- Python-Django (7)
- Hadoop (1)
- 工具 (3)
- Tokyo Tyrant (2)
- Comet (1)
- android (115)
- 音乐 (6)
- cxf (1)
- mqtt (1)
最新评论
-
hesai_vip:
学习了,感谢
gradlew wrapper使用下载到本地的gradle.zip文件安装。 -
imknown:
<div class="quote_title ...
解决android-Ultra-Pull-To-Refresh下拉刷新组件中嵌套ViewPager的一个bug -
姚瑶大坏蛋:
我也遇到了这个,用你这个方法,导致下拉刷新不起作用了,你遇到过 ...
解决android-Ultra-Pull-To-Refresh下拉刷新组件中嵌套ViewPager的一个bug -
寐语者:
LeaderElection(String zookeeper ...
使用Zookeeper来为你的程序加上Leader Election的功能。 -
fyc0109:
博主, 安装了一部分还是报这个错误!FAILURE: Buil ...
gradlew wrapper使用下载到本地的gradle.zip文件安装。
解决android-Ultra-Pull-To-Refresh下拉刷新组件中嵌套ViewPager的一个bug
- 博客分类:
- android
在项目中使用了android-Ultra-Pull-To-Refresh组件实现下拉刷新,有个页面是在下拉刷新ListView中包含了一个ViewPager,因为ListView和ViewPager的事件冲突导致ViewPager左右滑动的时候非常难,这是个常见的问题,使用下面改造的ViewPager就能解决这个问题。
这段代码也很好理解,就是在处理ViewPager touch事件的时候把他的父组件的事件屏蔽掉,这样就只响应了ViewPager touch事件,其实主要是parent.requestDisallowInterceptTouchEvent(true);这句代码的作用,这个是android组件的约定,这个会一级一级的上传,让所有的父组件都不响应touch事件。
但是在android-Ultra-Pull-To-Refresh的PtrFrameLayout上使用上面改造的ViewPager却没有效果,查看PtrFrameLayout源码发现他在实现dispatchTouchEvent方法时,没有考虑到FLAG_DISALLOW_INTERCEPT的因素,导致requestDisallowInterceptTouchEvent方法不起作用。OK,找到了问题点那就改造下PtrFrameLayout好了, 如下:
继承PtrFrameLayout,当如果调用了requestDisallowInterceptTouchEvent方法,那么dispatchTouchEvent方法就调用dispatchTouchEventSupper,这个其实就是ViewGroup中dispatchTouchEvent的实现。 OK,使用这个FixRequestDisallowTouchEventPtrFrameLayout和DisallowParentTouchViewPager类, 就解决了android-Ultra-Pull-To-Refresh下拉刷新组件和ViewPager事件冲突的问题。
+1
package com.myzaker.autoinsurance.ui.view; import android.content.Context; import android.os.Debug; import android.support.v4.view.ViewPager; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.ViewGroup; /** * Created by Denny on 2015/8/1. */ public class DisallowParentTouchViewPager extends ViewPager { private ViewGroup parent; public DisallowParentTouchViewPager(Context context) { super(context); } public DisallowParentTouchViewPager(Context context, AttributeSet attrs) { super(context, attrs); } public void setNestParent(ViewGroup parent) { this.parent = parent; } @Override public boolean dispatchTouchEvent(MotionEvent ev) { if (parent != null) { parent.requestDisallowInterceptTouchEvent(true); } return super.dispatchTouchEvent(ev); } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { if (parent != null) { parent.requestDisallowInterceptTouchEvent(true); } return super.onInterceptTouchEvent(ev); } @Override public boolean onTouchEvent(MotionEvent ev) { if (parent != null) { parent.requestDisallowInterceptTouchEvent(true); } return super.onTouchEvent(ev); } }
这段代码也很好理解,就是在处理ViewPager touch事件的时候把他的父组件的事件屏蔽掉,这样就只响应了ViewPager touch事件,其实主要是parent.requestDisallowInterceptTouchEvent(true);这句代码的作用,这个是android组件的约定,这个会一级一级的上传,让所有的父组件都不响应touch事件。
但是在android-Ultra-Pull-To-Refresh的PtrFrameLayout上使用上面改造的ViewPager却没有效果,查看PtrFrameLayout源码发现他在实现dispatchTouchEvent方法时,没有考虑到FLAG_DISALLOW_INTERCEPT的因素,导致requestDisallowInterceptTouchEvent方法不起作用。OK,找到了问题点那就改造下PtrFrameLayout好了, 如下:
package com.myzaker.autoinsurance.ui.view; import android.content.Context; import android.util.AttributeSet; import android.view.MotionEvent; import in.srain.cube.views.ptr.PtrFrameLayout; /** * Created by Denny on 2015/8/1. */ public class FixRequestDisallowTouchEventPtrFrameLayout extends PtrFrameLayout { private boolean disallowInterceptTouchEvent = false; public FixRequestDisallowTouchEventPtrFrameLayout(Context context) { super(context); } public FixRequestDisallowTouchEventPtrFrameLayout(Context context, AttributeSet attrs) { super(context, attrs); } public FixRequestDisallowTouchEventPtrFrameLayout(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override public void requestDisallowInterceptTouchEvent(boolean disallowIntercept) { disallowInterceptTouchEvent = disallowIntercept; super.requestDisallowInterceptTouchEvent(disallowIntercept); } @Override public boolean dispatchTouchEvent(MotionEvent e) { if (disallowInterceptTouchEvent) { return dispatchTouchEventSupper(e); } return super.dispatchTouchEvent(e); } }
继承PtrFrameLayout,当如果调用了requestDisallowInterceptTouchEvent方法,那么dispatchTouchEvent方法就调用dispatchTouchEventSupper,这个其实就是ViewGroup中dispatchTouchEvent的实现。 OK,使用这个FixRequestDisallowTouchEventPtrFrameLayout和DisallowParentTouchViewPager类, 就解决了android-Ultra-Pull-To-Refresh下拉刷新组件和ViewPager事件冲突的问题。
评论
2 楼
imknown
2017-01-03
姚瑶大坏蛋 写道
我也遇到了这个,用你这个方法,导致下拉刷新不起作用了,你遇到过吗?
+1
1 楼
姚瑶大坏蛋
2016-06-07
我也遇到了这个,用你这个方法,导致下拉刷新不起作用了,你遇到过吗?
发表评论
-
安卓各种长知识的技术文章,不断更新
2015-10-27 18:24 806http://blog.udinic.com/2015/09 ... -
发现一个android sdk更新神速的镜像
2015-09-02 11:26 967mirrors.dormforce.net:80 //(栋力无 ... -
gradle项目中怎么集中管理你的依赖库
2015-08-16 11:30 741项目结构 引用root --gradleScript ... -
使用Dexposed为你的安卓应用加上在线修复的能力。
2015-08-11 16:15 6146移动客户端应用相对于W ... -
android有质量的面试题
2015-03-17 14:31 977https://github.com/android-cn/i ... -
提高Android Studio的gradle编译速度。
2015-03-12 14:12 4427发现用Android Studio的make和直接使用comm ... -
gradlew wrapper使用下载到本地的gradle.zip文件安装。
2015-03-12 01:26 15500使用gradlew来build项目时,有时候老是需要下载gra ... -
gradlew wrapper设置代理下载gradle
2015-02-27 18:25 46091. HTTP Only Proxy configuratio ... -
认识mqtt
2015-01-30 11:43 1113http://www.hivemq.com/mqtt-esse ... -
Google的Android性能模式
2015-01-14 14:44 788http://www.infoq.com/cn/news/20 ... -
反对Fragment的理由,顺便叫你如果创建自己的自定义view
2014-12-18 17:08 1154下面这篇文章讲了反对Fragment的理由,顺便叫你如果创建自 ... -
获取status bar的高度
2014-12-16 19:52 1320public static int getStatus ... -
最新的appCompat support library中,actionbar的自定义view不能占用全部的宽度
2014-12-02 23:22 975<style name="AppTheme&q ... -
ScrollTricks实现StickHeader效果
2014-11-06 19:07 1151https://code.google.com/p/roman ... -
AppCompat v21 — Material Design for Pre-Lollipop Devices!
2014-10-23 11:03 913http://android-developers.blogs ... -
国内Android Sdk Manager不能更新的问题。
2014-09-15 15:49 987加hosts 引用203.208.46.146 dl.goo ... -
在Centos上安装android sdk遇到的问题。
2014-09-15 12:00 1402安装好android sdk后, 打包时老是会有下面的问题。 ... -
Android的一些制作图表按钮的工具
2014-09-09 16:36 1557Android Button Maker Android P ... -
DESIGNER'S GUIDE TO DPI
2014-08-29 14:37 485强烈建议美工看看, 对于移动app的多密度屏幕的支持 http ... -
java,android中https请求调用使用安全的方式
2014-08-20 17:07 4106那遇到这种情况,怎么处理呢?有以下两种方案: 1)按照以上 ...
相关推荐
"android-Ultra-Pull-To-Refresh"是一个高度可定制、性能优秀的下拉刷新库,由开发者精心打造,旨在解决原生Android SDK中SwipeRefreshLayout功能单一的问题。它提供了丰富的动画效果,支持ListView、GridView、...
`android-Ultra-Pull-To-Refresh`库解决了这个问题,它允许在下拉刷新视图内部嵌套一个ViewPager,使得用户在顶部下拉时仅触发下拉刷新,而在水平滑动时正常切换ViewPager的页面。这样既保留了下拉刷新的功能,又不...
这是现在已经停止维护的下拉刷新项目的替代方案。继承于ViewGroup可以包含任何View。功能比SwipeRefreshLayout强大。 使用起来非常简单。良好的设计,如果你想定制自己的UI样式,非常简单,就像给ListView加一个...
在Android应用开发中,"Ultra-Pull-To-Refresh"是一个非常实用的库,它扩展了标准的下拉刷新功能,增加了上拉加载更多的特性。这个库由Xiaofei Wang开发,旨在提供更加流畅和自定义化的下拉刷新与上拉加载体验。在这...
"android-Ultra-Pull-To-Refresh"是一个专门针对这一功能的开源库,它为Android开发者提供了一个高效、可定制的下拉刷新解决方案。 该例子打包中包含的"ultra_pulltorefresh"文件可能是一个完整的项目源代码,可以...
android Ultra-Pull-To-Refresh ADT版本 AS版本 链接 https://github.com/liaohuqiu/android-Ultra-Pull-To-Refresh 但是还需要个第三方包才能用,地址:https://github.com/liaohuqiu/cube-sdk 感觉代码很多。有...
在Android应用开发中,下拉刷新(Pull To Refresh)功能是一项常见的UI交互设计,它允许用户通过在列表顶部向下拉动来触发数据的刷新操作。这一功能显著提升了用户体验,尤其是在查看实时信息更新时,如新闻、社交...
"Ultra Pull To Refresh"是由开发者精心设计的Android库,旨在提供一个统一且灵活的解决方案来处理不同类型的视图(如ListView、GridView、SwipeRefreshLayout等)的下拉刷新需求。它的主要特点是高度可定制化,允许...
在移动应用开发中,"Pull-to-Refresh"(下拉刷新)是一种常见的用户交互模式,让用户可以轻松地更新内容。这种功能通常应用于列表视图、网格视图等,当用户向下拉动屏幕时,内容会刷新,展示最新的数据。标题中的...
Ultra-pull-to-refresh 是一个流行的开源第三方库,专为Android设计,提供了一种优雅的方式来实现这一功能。本文将深入探讨这个库的实现原理、使用方法以及其在Eclipse环境中的集成。 一、Ultra-pull-to-refresh...
Android是一种基于Linux内核(不包含GNU组件)的自由及开放源代码的移动操作系统,主要应用于移动设备,如智能手机和平板电脑。该系统最初由安迪·鲁宾开发,后被Google公司收购并注资,随后与多家硬件制造商、软件...
React本机平滑拉动以刷新 使用为React Native实现拉动刷新组件。 该解决方案仅使用纯Js即可支持iOS和Android。安装安装套件$ npm install --save react-native-smooth-pull-to-refresh# or$ yarn add react-native-...
[开源][安卓][下拉刷新]Pull-to-Refresh.Rentals-Android-master
Vue很棒的拉刷新 一个下拉刷新组件是由vuejs 2.0实现的,用于移动设备。演示版PS:请使用支持Promise的浏览器用法安装npm install vue-awesome-pull-refresh --save普通JS var VuePullRefresh = require ( 'vue-...
`vue-pull-to-refresh` 的核心功能在于提供了一个可定制化的组件,使得开发者可以轻松地在Vue项目中集成上下拉刷新。这个组件监听用户的触摸或滚动事件,当用户上拉或下拉到特定位置时,触发预定义的回调函数,从而...
"Pull-to-refresh",中文通常称为“下拉刷新”,是一种常见的用户界面设计模式,尤其在移动应用和网页中广泛使用。这个模式允许用户通过在页面顶部或底部向下拉动来触发数据的更新,常用于查看最新内容,如社交媒体...
作者:【郭孝星】http://blog.csdn.net/allenwells 微博:【郭孝星的新浪微博】http://weibo.com/allenwells 邮箱:allenwells@163.com 博客:http://blog.csdn.net/allenwells Github:...
"android Ultra Pull To Refresh-docs"中的"docs"文件夹可能包含了这些文档,指导开发者如何使用CSS来改变刷新指示器的颜色、大小、动画效果等。例如,你可以通过CSS更改背景颜色、字体样式,甚至创建复杂的过渡和...
"Pull-to-Refresh.Rentals-Android开源代码"是一个针对Android平台的开源项目,它实现了经典的下拉刷新功能,常用于列表视图(ListView)。这个项目源自GitHub,但原版可能需要一定的配置才能在Android环境中正常运行...
总结来说,"Pull-to-Refresh.Rentals-Android.zip"是一个专注于Android平台下拉刷新功能的开源库,由Yalantis团队精心打造。它提供了高度自定义的动画效果,为开发者提供了丰富的资源和代码示例,帮助他们创建出独特...