pullToRefresh

一直想写一个下拉刷新,一直没有一个好的想法,在git 中浏览了几款下啦刷新Demo,他们实现的方式也不一样,老一点的框架是自定义View 然后监听手势实现效果。新一点的是自定一ViewGroup 组建 然后结合 NestedScrollingParent, NestedScrollingChild两个属性,为了向下兼容 谷歌还提供了 NestedScrollingChildHelper ,NestedScrollingParentHelper 。

那么先来了解一下工程中所用到的接口和类

1 NestedScrollingChild
/** * Enable or disable nested scrolling for this view. 
* * <p>If this property is set to true the view will be permitted to initiate nested
 * scrolling operations with a compatible parent view in the current hierarchy. If this 
* view does not implement nested scrolling this will have no effect. Disabling nested scrolling
 * while a nested scroll is in progress has the effect of {@link #stopNestedScroll() stopping}
 * the nested scroll.</p> 
* * @param enabled true to enable nested scrolling, false to disable *

   NestedScrollingParent 
  /**     * React to a descendant view initiating a nestable scroll operation, claiming the    
 * nested scroll operation if appropriate.    
 *     * <p>This method will be called in response to a descendant view invoking     
  * {@link ViewCompat#startNestedScroll(View, int)}. Each parent up the view hierarchy will be   
  * given an opportunity to respond and claim the nested scrolling operation by returning     
* <code>true</code>.</p>     *
  * <p>This method may be overridden by ViewParent implementations to indicate when the view  
 * is willing to support a nested scrolling operation that is about to begin. If it returns   
* true, this ViewParent will become the target view's nested scrolling parent for the duration    
 * of the scroll operation in progress. When the nested scroll is finished this ViewParent  
   * will receive a call to {@link #onStopNestedScroll(View)}. 
    * </p>     *     * @param child Direct child of this ViewParent containing target    
 * @param target View that initiated the nested scroll 
    * @param nestedScrollAxes Flags consisting of {@link ViewCompat#SCROLL_AXIS_HORIZONTAL},     *                         {@link ViewCompat#SCROLL_AXIS_VERTICAL} or both     * @return true if this ViewParent accepts the nested scroll operation

注释很多,我们可以简单一点的认为 他们是为了实现 父View 于子View 之间的嵌套滑动。当然 前面也提到过 这个方法是 5.0 之后出来的 ,所以有 NestedScrollingChildHelper ,NestedScrollingParentHelper 。来帮助实现向下兼容。

NestedScrollingChild 子类实现的接口
public void setNestedScrollingEnabled(boolean enabled);
设置嵌套滑动是否可用

      public boolean isNestedScrollingEnabled();
      嵌套滑动是否可用
  
    @param axes 表示方向 有一下两种值 
 *             ViewCompat.SCROLL_AXIS_HORIZONTAL 横向哈东 
 *             ViewCompat.SCROLL_AXIS_VERTICAL 纵向滑动 
    public boolean startNestedScroll(int axes);
     滑动方向

     public void stopNestedScroll();  
      停止滑动

   public boolean hasNestedScrollingParent()
  是否有父View 支持 嵌套滑动,  会一层层的网上寻找父View 

    public boolean dispatchNestedScroll(int dxConsumed, int dyConsumed,  
                                    int dxUnconsumed, int dyUnconsumed, int[] offsetInWindow);  
dxConsumed x轴上 被消费的距离 
dyConsumed y轴上 被消费的距离 
dxUnconsumed x轴上 未被消费的距离 
dyUnconsumed y轴上 未被消费的距离 
offsetInWindow view 的移动距离 


public boolean dispatchNestedPreScroll(int dx, int dy, int[] consumed, int[] offsetInWindow);  
一般在滑动之前调用, 在ontouch 中计算出滑动距离, 然后 调用改 方法, 就给支持的嵌套的父View 处理滑动事件 
  dx x 轴上滑动的距离, 相对于上一次事件, 不是相对于 down事件的 那个距离 
  dy= y 轴上滑动的距离 
 consumed 一个数组, 可以传 一个空的 数组,  表示 x 方向 或 y 方向的事件 是否有被消费 
 offsetInWindow   支持嵌套滑动到额父View 消费 滑动事件后 导致 本 View 的移动距离 
 支持的嵌套的父View 是否处理了 滑动事件 


    public boolean dispatchNestedFling(float velocityX, float velocityY, boolean consumed);   
 x 轴上的滑动速度 
 velocityY y 轴上的滑动速度 
 consumed 是否被消费  

public boolean dispatchNestedPreFling(float velocityX, float velocityY);  
  x 轴上的滑动速度 
 velocityY y 轴上的滑动速度

之后会整理逻辑然后将代码奉上。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343

推荐阅读更多精彩内容