欢迎来到天天文库
浏览记录
ID:40495007
大小:1.16 MB
页数:17页
时间:2019-08-03
《亲手实现一个刷新控件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、想要亲手实现一个刷新控件你只需要掌握这些知识现在Android阵营里面的刷新控件很多,稂莠不齐。笔者试图从不一样的角度,在它的个性化和滚动上下一些功夫。笔者期望,这个刷新控件能像Google的SwipeRefreshLayout一样,支持大多数列表控件,有加载更多功能,最好是要很方便的支持个性化,滚动中能够越界是不是也会带来比普通的刷新控件更好的交互体验。作者:lcodecorex来源:segmentfault
2、2016-12-1317:02 收藏 分享现在Android阵营里面的刷新控件很多,稂莠不齐。笔者试图从不一样的角度,在它的个性化和滚动上下一些功夫。笔者期
3、望,这个刷新控件能像Google的SwipeRefreshLayout一样,支持大多数列表控件,有加载更多功能,最好是要很方便的支持个性化,滚动中能够越界是不是也会带来比普通的刷新控件更好的交互体验。开源库在这,TwinklingRefreshLayout,如果喜欢请star,笔者的文章也是围绕着这个控件的实现来说的。为了方便,笔者将TwinklingRefreshLayout直接继承自FrameLayout而不是ViewGroup,可以省去onMeasure、onLayout等一些麻烦,Header和Footer则是通过LayoutParams来设置View的Gra
4、vity属性来做的。1.View的onAttachedToWindow()方法首先View没有明显的生命周期,我们又不能再构造函数里面addView()给控件添加头部和底部,因此这个操作比较合适的时机就是在onDraw()之前——onAttachedToWindow()方法中。此时View被添加到了窗体上,View有了一个用于显示的Surface,将开始绘制。因此其保证了在onDraw()之前调用,但可能在调用onDraw(Canvas)之前的任何时刻,包括调用onMeasure(int,int)之前或之后。比较适合去执行一些初始化操作。(此外在屏蔽Home键的时候也
5、会回调这个方法)·onDetachedFromWindow()与onAttachedToWindow()方法相对应。·ViewGroup先是调用自己的onAttachedToWindow()方法,再调用其每个child的onAttachedToWindow()方法,这样此方法就在整个view树中遍布开了,而visibility并不会对这个方法产生影响。·onAttachedToWindow方法是在Activityresume的时候被调用的,也就是act对应的window被添加的时候,且每个view只会被调用一次,父view的调用在前,不论view的visibility
6、状态都会被调用,适合做些view特定的初始化操作;·onDetachedFromWindow方法是在Activitydestroy的时候被调用的,也就是act对应的window被删除的时候,且每个view只会被调用一次,父view的调用在后,也不论view的visibility状态都会被调用,适合做最后的清理操作;就TwinklingRefreshLayout来说,Header和Footer需要及时显示出来,View又没有明显的生命周期,因此在onAttachedToWindow()中进行设置可以保证在onDraw()之前添加了刷新控件。1.@Override 2.
7、 protected void onAttachedToWindow() { 3. super.onAttachedToWindow(); 4. 5. //添加头部 6. FrameLayout headViewLayout = new FrameLayout(getContext()); 7. LayoutParams layoutParams = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 0); 1. layoutParams
8、.gravity = Gravity.TOP; 2. headViewLayout.setLayoutParams(layoutParams); 3. 4. mHeadLayout = headViewLayout; 5. this.addView(mHeadLayout);//addView(view,-1)添加到-1的位置 6. 7. //添加底部 8. FrameLayout bottomViewLayout = new FrameLayout(getContext());
此文档下载收益归作者所有