折叠与下拉:QuickAction 与 GridMenu 的设计实现

2024-11-21
来源:网络整理

折叠时,它是部分折叠的,并继续向上滑动以移出屏幕。下拉时, 和 之间出现刷新动画。

结构设计

前面的部分只是分析了结构,这里就开始设计了。为了实现折叠效果,其实有以下几种设计方法:

除此之外,其余的都是使用实现的。

和其他部分一样,使用实现。

, ,as , 实现使用。

……

为了方便下拉刷新的放置,我选择了第三种结构,用它来实现下拉刷新。这种结构也是为了方便替换其他下拉刷新控件。

除了使用下拉刷新效果且在 和 位置下拉不能触发下拉刷新外,其他交互效果与支付宝相同。

开始之前我还查了一下支付宝的实现方法。让我惊讶的是,支付宝实现了这个页面,除了其他部分。

完成

我们的效果其实和很相似。通过上一篇文章我们知道两者使用了3个基类。如果能用起来就太好了。

然而,这三个基类的访问权限对包是可见的,因此必须从它们中复制并使用它们。还有一些步骤需要修改基类中的方法并增加方法的可见性。

包括其他部分,要达到的效果大致相当于和out结合起来。

继承自。

首先在()方法中获取子View的引用。 mBar是View的一部分,一部分,其余部分。之所以没有使用上面的命名方式,是因为我不想将这种效果限制得那么严密。这些变量以其功能命名。

最后一行语句将 mBar 移至顶部,以便始终显示它。

支付宝回调失败会回调几次_支付宝不回调_支付宝支付一共回调几次

布局部分就不多说了。实现了类似的布局,子视图按顺序排列。偏移量的处理不在这里。

滚动区域是控制滚动的重要部分,涉及两种方法。返回总的可滚动区域和折叠效果的区域。

继承自,并且相同,它天生就有自己的处理和事件处理。需要实现的是snap效果。不仅如此,还达到了精确的效果。换句话说,效果和也是有联系的。这里我主要说一下我是如何处理效果的。

->

通过不断修改偏移量来实现效果,最终呈现出连贯的动画。如果不处理效果的话,结果会是效果到达顶部才出现,即剩余的偏移量不会被消耗。因此,要实现的联动就是消耗多余的偏移量。

可以通过两种方式触发,一种是,一种是。方法中我们判断是不是向上滑动,就手动调用该方法,是一致的。

类中的回调最终调用设置偏移量的方法:

的实施。是重写此方法并分配未消耗的偏移量。我们先看覆盖方法:如果判断向上滑动,除了将标记设置为true外,还会修改边界值:

修改边界值是因为我们希望即使达到了边界,效果也不会停止,因为我们必须再次将多余的偏移量分配给它。

首先修正边界值,然后调用父类的fset实现。该方法返回父类消耗的偏移量。然后计算剩余的偏移量:

int unconsumedY =    newOffset - curOffset

支付宝不回调_支付宝支付一共回调几次_支付宝回调失败会回调几次

   + consumed - mTempFlingDispatchConsumed;

注意这里的变量,因为总dy不能直接得到。使用-获取dy时,当到达实际边界时,获取到的dy不会继续变小,所以获取到的dy实际上是累加的,所以使用变量来存储额外的消耗。下降的偏移量。

当不为0时,表示还有剩余未消耗的。我们分配它并记录消费值。该值与自身消耗值相加,作为总消耗值返回。

中,调用的方法直接进行滑动(注意符号)。

这样就完成了分发到。

->

向下触发效果时需要将未消耗的交出进行处理。取决于滚动。具体来说,对于该方法,我们需要重写该方法并分配未消耗的偏移量。这里我们直接使用匿名内部类来重写它。

与此类似,调用 .方法进行滚动,并注意边界的处理。

虽然fset也会被调用,但是因为必须是这次,所以不会造成循环调用。

这样就实现了事件的双向分发。

由于和.没有什么特别的区别,这里就不多说了。

总结

虽然实现这个效果的时间并不多,但我借此机会充分分析了、、等官方的实现,使得这个效果变得更加有意义。

如果单独评价这个交互的话,我认为下拉刷新应该出现在顶部,这样页面看起来更稳定,不会头重脚轻。

源代码:

如果您有想要学习的文章,请留言,我会组织征稿。如果你有好文章想分享给大家,欢迎投稿,直接把文章链接发给我即可。

分享