在观看该文章之前,建议你先观看慕课网的Android的ListView下拉刷新教程。


刚刚学习完慕课网的Android的ListView下拉刷新, 对于下拉刷新有了切实的体会,之前都是使用该组件,从来没想过自己编写该组件,不过该组件拿到实际的工作当中,还是不够的,于是基于青出于蓝而胜于蓝的理念,我对该组件进行了如下的改进,使之可以直接应用到工作项目中


  1. 对于下拉刷新增加了动画效果,使之移动过程中都是平缓的移动,实现方式是用Runnable内部循环;
  2. 增加的在activity中,直接调用下拉刷新的方法,而不是手动下拉;
  3. 摒弃了晦涩难懂的measureView方法,改用直接在onMeasure中获取header的高度,代码清晰易懂;
  4. 增加了防止误触碰功能,避免微笑的触碰都会移动listview。
当然,一图胜千言,先上效果图:
为什么gif图片没有动态效果,再上传一次吧



其中获取header高度的方法如下:
@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {super.onMeasure(widthMeasureSpec, heightMeasureSpec);if (isFirshMeasure && header.getMeasuredHeight()!= 0) {isFirshMeasure = false;headerHeight = header.getMeasuredHeight();Log.i("debug", "header height kk " + header.getMeasuredHeight());topPadding(-headerHeight);}}

由于在listview中,onMesaure是重复被调用了,所以要加入一个判断,避免重复获取高度;
平缓移动header的方法如下:
private final Runnable smoothToRefreshStag = new Runnable() {@Overridepublic void run() {if (spaceMove > 0) {spaceMove -= 10;topPadding(spaceMove);postDelayed(this, 10);}}};

在代码中,碰到需要移动了,就post该Runnable就可以了,这个移动的方式不是我自创了,灵感来自jakeWharton大神的Android-ViewPagerIndicator
另外需要在代码中刷新,就调用startRefreshing()方法,它也会回调onReflash()方法的。
最最后,当然必须把源码附上啦, 源码地址:http://download.csdn.net/detail/weidongjian/8333475

更多相关文章

  1. Android(安卓)四大组件你都知道吗
  2. Android中常见的安全问题
  3. Android(安卓)JAR组件安装打包教程
  4. Android官方API Guide学习之一 Android介绍-基础知识
  5. 【开源项目推荐】Android(安卓)Jetpack 官方文档 中文翻译
  6. Android(安卓)Studio 下拉框Spinner实例
  7. 使用内容提供器跨应用分享你的数据(1)
  8. Android实现登录界面和功能实例
  9. android滑动组件嵌套一般思路,多任务手势思路,触摸传递思路,【例】l

随机推荐

  1. Android(安卓)网络连接判断并进行相关处
  2. 开源项目之Android 结束篇
  3. Android media 播放mp3时ID3 tag 显示乱
  4. 【经验小谈】androidx86虚拟机跟intel-vt
  5. cocos2d for android
  6. android手机获取手机唯一识别号
  7. 在android中嵌入脚本语言综述
  8. Android平台Firefox――Fennec编译手记
  9. Android平台通用安全问题分析及策略
  10. [分享]android 人机界面指南(androdi设计