- 浏览: 1208107 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (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:
姚瑶大坏蛋 写道我也遇到了这个,用你这个方法,导致下拉刷新不起 ...
解决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 746http://blog.udinic.com/2015/09 ... -
发现一个android sdk更新神速的镜像
2015-09-02 11:26 879mirrors.dormforce.net:80 //(栋力无 ... -
gradle项目中怎么集中管理你的依赖库
2015-08-16 11:30 683项目结构 引用root --gradleScript ... -
使用Dexposed为你的安卓应用加上在线修复的能力。
2015-08-11 16:15 6085移动客户端应用相对于W ... -
android有质量的面试题
2015-03-17 14:31 873https://github.com/android-cn/i ... -
提高Android Studio的gradle编译速度。
2015-03-12 14:12 4366发现用Android Studio的make和直接使用comm ... -
gradlew wrapper使用下载到本地的gradle.zip文件安装。
2015-03-12 01:26 15354使用gradlew来build项目时,有时候老是需要下载gra ... -
gradlew wrapper设置代理下载gradle
2015-02-27 18:25 44891. HTTP Only Proxy configuratio ... -
认识mqtt
2015-01-30 11:43 1050http://www.hivemq.com/mqtt-esse ... -
Google的Android性能模式
2015-01-14 14:44 705http://www.infoq.com/cn/news/20 ... -
反对Fragment的理由,顺便叫你如果创建自己的自定义view
2014-12-18 17:08 1075下面这篇文章讲了反对Fragment的理由,顺便叫你如果创建自 ... -
获取status bar的高度
2014-12-16 19:52 1272public static int getStatus ... -
最新的appCompat support library中,actionbar的自定义view不能占用全部的宽度
2014-12-02 23:22 894<style name="AppTheme&q ... -
ScrollTricks实现StickHeader效果
2014-11-06 19:07 1075https://code.google.com/p/roman ... -
AppCompat v21 — Material Design for Pre-Lollipop Devices!
2014-10-23 11:03 835http://android-developers.blogs ... -
国内Android Sdk Manager不能更新的问题。
2014-09-15 15:49 913加hosts 引用203.208.46.146 dl.goo ... -
在Centos上安装android sdk遇到的问题。
2014-09-15 12:00 1348安装好android sdk后, 打包时老是会有下面的问题。 ... -
Android的一些制作图表按钮的工具
2014-09-09 16:36 1484Android Button Maker Android P ... -
DESIGNER'S GUIDE TO DPI
2014-08-29 14:37 431强烈建议美工看看, 对于移动app的多密度屏幕的支持 http ... -
java,android中https请求调用使用安全的方式
2014-08-20 17:07 4053那遇到这种情况,怎么处理呢?有以下两种方案: 1)按照以上 ...
相关推荐
下拉刷新框架:android-Ultra-Pull-To-Refresh 导入AS教程:http://blog.csdn.net/jljcslg/article/details/50543548
这是现在已经停止维护的下拉刷新项目的替代方案。继承于ViewGroup可以包含任何View。功能比SwipeRefreshLayout强大。 使用起来非常简单。良好的设计,如果你想定制自己的UI样式,非常简单,就像给ListView加一个...
利用android-Ultra-Pull-To-Refresh做的下拉刷新,支持viewpager等view完美嵌套
Ultra-Pull-To-Refresh-With-Load-More使用demo
android Ultra-Pull-To-Refresh ADT版本 AS版本 链接 https://github.com/liaohuqiu/android-Ultra-Pull-To-Refresh 但是还需要个第三方包才能用,地址:https://github.com/liaohuqiu/cube-sdk 感觉代码很多。有...
android-Ultra-Pull-To-Refresh例子打包,直接导入运行
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
pull-to-refresh_下拉刷新.zip 代码pull-to-refresh_下拉刷新.zip 代码
Vue很棒的拉刷新 一个下拉刷新组件是由vuejs 2.0实现的,用于移动设备。演示版PS:请使用支持Promise的浏览器用法安装npm install vue-awesome-pull-refresh --save普通JS var VuePullRefresh = require ( 'vue-...
作者:【郭孝星】http://blog.csdn.net/allenwells 微博:【郭孝星的新浪微博】http://weibo.com/allenwells 邮箱:allenwells@163.com 博客:http://blog.csdn.net/allenwells Github:...
非常强大,可扩展性非常强,兼容各种view的下拉刷新事件。
此资源为 酷炫的几款下拉刷新框架之Phoenix Pull-To-Refresh的实例代码,详情请点击http://blog.csdn.net/qq347198688/article/details/52518150
android-Ultra-Pull-To-Refresh liaohuqiu 3413 1.0.11 android-pulltorefresh(作者已停止维护) johannilsson 2414 latest Phoenix Yalantis 1897 1.2.3 FlyRefresh race604 1843 2.0.0 ...
该工具类库是从Ultra-pull-to-refresh中抽取出来的相关代码,实现的类库。该类库为Ecplise版本,直接导入到Ecplise中并依赖即可
完美框架支持上拉下拉刷新,只需在xml中修改属性即可实现刷新功能
Android-Pull-To-Refresh 支持下拉+上拉刷新,支持不需要刷新也可上下拉。 标签:Android
pull-to-refresh.swift - 是一款非常易于开发者使用的下拉刷新和加载更多组件。通过一个 UIScrollView 的扩展,可以轻松为 UIScrollView 的所有子类添加下拉刷新功能。
下拉刷新中Ultra-Pull-To-Refresh一直是我最喜欢用的了,这里自定义一个HeaderView的样式。和普通的样式略微有些区别。先看效果图 一眼看上去和普通下拉刷新样式没啥区别,但仔细看会发现下拉时的头部是盖在内容上...
vue-pull-refresh vuejs 2.0针对移动设备实现的下拉刷新组件。 演示演示PS:请使用支持Promise用法的浏览器安装vue-pull-refresh vuejs 2.0用于移动设备的下拉刷新组件实现。 演示演示PS:请使用支持Promise用法的...