本文主要是介绍android swiperefreshlayout 自定义,自定义一个更好用的SwipeRefreshLayout(弹力拉伸效果详解)...,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
前言
熟悉SwipeRefreshLayout的同学一定知道,SwipeRefreshLayout是android里面专为RecyclerView,NestedScrollView提供下拉刷新动画的一个控件。可是在使用过程中有些局限性,例如只支持上述控件,不支持ListView,GridView等,另外下拉的动画效果很难更改,而且不支持上拉加载……在很多场景的情况下往往不符合我们的需求。
今天为大家分享的是一个支持上拉下拉加载的控件,代码并非纯原创,改造自github作者baoyz的PullRefreshLayout (有印象最早看到的侧滑删除好像也是他写的),也参考了一些官方SwipeRefreshLayout的源码和网上的一些资料,为了尊重原作者,我还是将其命名为——PullRefreshLayout。
效果如下:
原理
其实是一个ViewGroup,通过对手势的处理,使子控件实现拉动的动画效果,并再加上两个子控件,上拉的loading和下拉的loading(把loading用控件来封装可以很方便的更改动画,真是贴心~),在处理手势拉动的时候,通知他们显示出对应的效果。代码很长,有很多小细节需要注意,在这里我只介绍几个关键的位置,源代码会发在文章的最后。
拖拽弹力效果
大家可以看到,拖拽的时候,是有个弹力效果的,也就是说当拖拽的距离大于某个值,拖动的位移就会慢慢减小,最后会变得拖不动
看上去有点酷炫,其实实现起来就是高中数学知识啦,看下关键代码
final float scrollTop = yDiff * DRAG_RATE;
float originalDragPercent = scrollTop / mTotalDragDistance;
mDragPercent = Math.min(1f, Math.abs(originalDragPercent));//拖动的百分比
float extraOS = Math.abs(scrollTop) - mTotalDragDistance;//弹簧效果的位移
float slingshotDist = mSpinnerFinalOffset;
//当弹簧效果位移小余0时,tensionSlingshotPercent为0,否则取弹簧位移于总高度的比值,最大为2
float tensionSlingshotPercent = Math.m
这篇关于android swiperefreshlayout 自定义,自定义一个更好用的SwipeRefreshLayout(弹力拉伸效果详解)...的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!