zoukankan      html  css  js  c++  java
  • 嵌套滚动demo

    https://github.com/luv135/NestedScrollingDemo

    https://github.com/ggajews/nestedscrollingchildviewdemo

    ViewParentCompat是一个和父view交互的兼容类,它会判断api version,如果在Lollipop以上,就是用view自带的方法,否则判断是否实现了NestedScrollingParent接口,去调用接口的方法。

    那么具体我们怎么使用这一套机制呢?比如子View这时候我需要通知父view告诉它我有一个嵌套的touch事件需要我们共同处理。那么针对一个只包含scroll交互,它整个工作流是这样的:

    一、startNestedScroll

    首先子view需要开启整个流程(内部主要是找到合适的能接受nestedScroll的parent),通知父View,我要和你配合处理TouchEvent

    二、dispatchNestedPreScroll

    在子View的onInterceptTouchEvent或者onTouch中(一般在MontionEvent.ACTION_MOVE事件里),调用该方法通知父View滑动的距离。该方法的第三第四个参数返回父view消费掉的scroll长度和子View的窗体偏移量。如果这个scroll没有被消费完,则子view进行处理剩下的一些距离,由于窗体进行了移动,如果你记录了手指最后的位置,需要根据第四个参数offsetInWindow计算偏移量,才能保证下一次的touch事件的计算是正确的。

    如果父view接受了它的滚动参数,进行了部分消费,则这个函数返回true,否则为false。

    这个函数一般在子view处理scroll前调用。

    三、dispatchNestedScroll

    向父view汇报滚动情况,包括子view消费的部分和子view没有消费的部分。

    如果父view接受了它的滚动参数,进行了部分消费,则这个函数返回true,否则为false。

    这个函数一般在子view处理scroll后调用。
    <!--[if !supportLineBreakNewLine]-->
    <!--[endif]-->

    四、stopNestedScroll

    结束整个流程。

    整个对应流程是这样

    子view   父view

    startNestedScroll onStartNestedScroll、onNestedScrollAccepted

    dispatchNestedPreScroll    onNestedPreScroll

    dispatchNestedScroll  onNestedScroll

    stopNestedScroll onStopNestedScroll

    一般是子view发起调用,父view接受回调。

    我们最需要关注的是dispatchNestedPreScroll中的consumed参数。

        public boolean dispatchNestedPreScroll(int dx, int dy, int[] consumed, int[] offsetInWindow) ;

    它是一个int型的数组,长度为2,第一个元素是父view消费的x方向的滚动距离;第二个元素是父view消费的y方向的滚动距离,如果这两个值不为0,则子view需要对滚动的量进行一些修正。正因为有了这个参数,使得我们处理滚动事件的时候,思路更加清晰,不会像以前一样被一堆的滚动参数搞混。

  • 相关阅读:
    第十二章学习笔记
    UVa OJ 107 The Cat in the Hat (戴帽子的猫)
    UVa OJ 123 Searching Quickly (快速查找)
    UVa OJ 119 Greedy Gift Givers (贪婪的送礼者)
    UVa OJ 113 Power of Cryptography (密文的乘方)
    UVa OJ 112 Tree Summing (树的求和)
    UVa OJ 641 Do the Untwist (解密工作)
    UVa OJ 105 The Skyline Problem (地平线问题)
    UVa OJ 100 The 3n + 1 problem (3n + 1问题)
    UVa OJ 121 Pipe Fitters (装管子)
  • 原文地址:https://www.cnblogs.com/xiaorenwu702/p/5092106.html
Copyright © 2011-2022 走看看