位置: 编程技术 - 正文

打造android万能上拉下拉刷新框架——XRefreshView (二)(搭建安卓开发环境必须的工具)

编辑:rootadmin

推荐整理分享打造android万能上拉下拉刷新框架——XRefreshView (二)(搭建安卓开发环境必须的工具),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:打造高质量android应用,打造高质量android应用,万能安卓系统,android平台搭建,利用安卓系统制作app,android平台搭建,打造高质量android应用,android打造下载,内容如对您有帮助,希望把文章链接给更多的朋友!

打造Android万能上拉下拉刷新框架--XRefreshView(一)

一、前言

自从上次发表了打造android万能上拉下拉刷新框架——XRefreshView (一)之后,期间的大半个月一直都很忙,但是我每天晚上下班以后都有在更新和维护XRefreshView,也根据一些朋友的意见解决了一些问题,这次之所以写这篇文章,是因为XRefreshView已经到了一个功能相对可靠和稳定的一个阶段。下面我会介绍下XrefreshView的最新功能和用法,以及实现的主要思路。

二、更新

2.1判断下拉上拉刷新时机方式的修改

之前是通过 refreshView.setRefreshViewType(XRefreshViewType.ABSLISTVIEW);这样来预先设置view的类型来选择对应判断时机的方法,现在已经不用这样做了,改成了下面这样。

正如你所见,ViewCompat.canScrollVertically(view, direction)这个方法可以用来判断view能不能向上或者向下滑动,从而可以判断view有没有到达顶部或者底部,在4.0以后在个方法通常是很管用的,但是2.3.3以前则不是这样,为了兼容2.3.3我又做了一些view类型的判断,通过view的类型来提供特别的判断到达顶部或者底部的方法。一般情况下,常用的view通过上述的方法都可以准确的判断出有没有到达顶部或者底部,但是如果你要刷新的是一个复杂的或者自定义的view,也可以通过以下的方式来做

XRefreshView把判断view到达顶部和底部的工作交给你去做了,你只要告诉XRefreshView什么时候是正确的刷新时机就行了,与上次博客中提到的方法不同的是,XRefreshView这次提供了两个接口,把顶部和底部的判断时机给分开了,主要是考虑到下拉刷新和上拉加载有的时候并不是都需要的。

2.2headview和footview上下移动时的方式的修改

一开始,移动headview和footview我是通过属性动画来移动的

后来为了兼容2.3.3我还专门下载了动画开源库NineOldAndroidsNineOldAndroids,这个库究竟是干嘛的呢?在API3.0(Honeycomb), SDK新增了一个android.animation包,里面的类是实现动画效果相关的类,通过Honeycomb API,能够实现非常复杂的动画效果,但是如果开发者想在3.0以下使用这一套API, 则需要使用开源框架Nine Old Androids,在这个库中会根据我们运行的机器判断其SDK版本,如果是API3.0以上则使用Android自带的动画类,否则就使用Nine Old Androids库中,这是一个兼容库。 (注:红色部分的字我是直接引用夏安明大神的博客原文,一直都在看他的博客,所以一直很佩服他,他的博客的质量都很不错。)之后兼容性的问题就算处理好了,但后来Xutils 4群的大炮告诉我,XRefreshView在下拉的时候会有抖动的情况,我知道了这个情况以后就开始找问题,后来发现是因为用属性动画来移动header的问题,不用属性动画就好了,仔细想一想,属性动画其实是通过反射来属性对应的get/set方法来执行的,毕竟是反射,而在手指移动的时候会触发大量的action_move,每个action_move都会做一次反射,那么就会做大量的反射工作,大量的密集的反射就会导致性能方面有所降低,所以出现了抖动的情况。放弃反射以后,我用的是view.offsetTopAndBottom(deltaY)这个方法,看方法的注释翻译过来就是在竖直方向上以像素为单位来移动view。没什么好说的,用起来很简单,你&#;得拥有。

2.3demo用了流式布局

很简单,感兴趣的可以看看

打造android万能上拉下拉刷新框架——XRefreshView (二)(搭建安卓开发环境必须的工具)

2.4点击按钮刷新和支持回弹

现在有支持点击按钮刷新,

还有就是可以支持设置是否下拉刷新和上拉加载大炮说如果可以在不可以下拉刷新和上拉加载的情况下也可以有回弹的效果就好了,于是现在的版本就支持了。

三、实现相关3.1前后变化

之前我是把headview,被刷新的childview和footview当成了三个部分来看待,并且分别记录了一开始的各个view的位置

然后在手指移动的时候不断更新当前各个view的y轴坐标,最后再来逐个移动各个view,这样做无意中就加大了工作量以及工作的复杂度,后来我想到了把三个部分当成一个整体,这样以来就简单很多了,也就不再需要那么多的变量。

3.2实现过程

3.2.1测量

3.2.2布局

其中

mHolder.mOffsetY是用来记录整个view在y轴方向上的偏移量的。这里之所以加上mHolder.mOffsetY,是因为在拖动刷新的过程中view的改变会引起系统重新测量和布局,加上这个偏移量以后,可以在系统重新布局的时候保住view当前的位置,不恢复到初始位置。

3.2.3 事件处理并移动view

首先可以看到,所以的事件处理都在dispatchTouchEvent(MotionEvent ev)方法里进行,而之前则是分成两部分进行的,在onInterceptTouchEvent(MotionEvent ev)方法中进行拦截,事件处理则在onTouchEvent(MotionEvent ev)中进行。这样做是因为大炮说他下拉刷新的时候,由于子view非常复杂,子view有时候会抢占事件,造成卡住不刷新了。我们都知道子view是可以通过requestDisallowInterceptTouchEvent来请求父类不要拦截事件,那么onInterceptTouchEvent方法就不会执行,那我们下拉刷新也就不可靠了,所以为了解决这个问题,我把所有的处理都丢到dispatchTouchEvent方法中做。

再来看看sendCancelEvent()和sendDownEvent()这两个方法

触摸事件一开始肯定会被子view接收到的,如果是listview的话,就会有item的点击效果出现,这很正常,但是如果此时触发下拉刷新的话,同时又有item的点击效果,那么看起来就不是很自然,所有此时可以通过sendCancelEvent()来给子view发送一个cancel事件,这样item的点击效果就会消失。还有当我们拉下headerview以后没有达到刷新条件,并且接着有往上推把headerview又完全隐藏了,此时就应该i把事件交还给子view,让子view接收到事件并移动,可以通过sendDownEvent来达到效果。

最后说下移动view的处理

当手指在拖动的时候,

通过moveView方法来移动view,并把偏移量存了下来。

当手指离开以后,通过scroller来移动view

这里用了线性的插&#;器,表示移动的时候是匀速变动的从上面可以看出,整个移动过程中只用到了一个mOffsetY变量来储存偏移量,代码相较于之前瞬间变得很简单。

四、最后的说明

如果你对XRefreshView感兴趣,可以在github上关注XRefreshView

当然你也可以点此直接下载

版权声明:本文为博主原创文章,未经博主允许不得转载。

Android如何修改app不在多任务列表中显示 在实际开发中,我们希望某些activity或者应用程序不在多任务列表中显示,即长按Home键或者多任务按钮键不显示最近运行的程序,我们可以在相应应用

关于中国天气(Weather.com.cn)的查询 这两天看了下如何获取天气预报,写篇文章总结下:Weather.com有如下三个Json式的查询接口,以北京为例:

Android In <declare-styleable> MenuView, unable to find attribute android:preserveIconSpacing Indeclare-styleableMenuView,unabletofindattributeandroid:preserveIconSpacing升级sdk版本之后出现的问题两个解决方案1:Searchandroid:preserveIconSpacing在V7包attrs中找到删除2:M

标签: 搭建安卓开发环境必须的工具

本文链接地址:https://www.jiuchutong.com/biancheng/374401.html 转载请保留说明!

上一篇:Android Chromium WebView学习启动篇

下一篇:Android如何修改app不在多任务列表中显示(修改安卓app权限教程)

  • 企业税收收入怎么计算
  • 豆制品属于农产品初加工吗
  • 每月记账报税客户怎么填
  • 个体工商户需要报税吗
  • 利润分配的核算PPT
  • 车购税退税需要多长时间
  • 医院销售药品是干嘛的
  • 劳务关系需要缴社保吗?
  • 人民币结算意味着什么
  • 股利怎么算出来的
  • 一般纳税人租赁费的税率是多少
  • 如何确认增值税纳税义务发生时间
  • 什么是法?法的本质特征是什么
  • 应收账款怎么样转入以前年度损益调整
  • 租赁发票需要写税号吗
  • 工程建造过程中发生的在建工程人员工资180万尚未支付
  • 会议费税前扣除最新税务规定
  • 加工业务怎么报税的
  • 非全日制劳动用工扣税
  • 原材料损失分录
  • 社会团体的费用包括哪些
  • 受委托研发企业可以享受研发支出吗
  • 打开网页时显示无法获取属性
  • 外贸出口企业退税计算
  • win10更新失败怎么回事
  • 应收账款补贴
  • 苹果电脑怎么切换中英文
  • 其他应付款结转什么科目
  • 差额征收增值税 取得的进项可否抵扣
  • php获取扩展名的几种方法
  • 夕阳下的大白鲨过山车,美国新泽西州 (© John Van Decker/Alamy)
  • 怎么计提企业所得税
  • 附有退回条件的销售商
  • 128种chatGPT可以为人类做的事情
  • hexdump windows
  • saas web
  • 教育局是一般纳税人吗
  • 航天税盘服务费全额抵扣报税流程
  • 公司员工抽奖活动
  • 长期债权投资业务处理
  • 企业所得税实训内容及过程
  • 在计算应纳税所得额时
  • 税率变更对企业的影响
  • 金税四期视频
  • 非营利组织接受捐赠收入要交企业所得税吗
  • 本期销项税额怎么算
  • 向投资者支付的股息
  • 税务ukey版怎么读入发票
  • 注销时其他应付款怎么冲平
  • 公司代缴社保生育津贴大概领多少
  • 捐赠,广告宣传费,业务招待费如何调整
  • 工资每月变动社保怎么变
  • 清算申报在哪里报
  • 以前年度长期股权投资漏记调整
  • 被收购企业账务怎么处理
  • 业务招待费包含样品费吗
  • mysql5.5.27安装教程与配置
  • sql函数使用
  • MySQL为字段添加主键
  • 简述mysql的优势
  • window7临时文件
  • window正在检查内存
  • win8固态硬盘
  • ubuntu sshserver
  • asmproserver.exe是什么进程 asmproserver进程信息查询
  • windows7 运行
  • win7右下角的网络连接不显示
  • win7系统运行红警黑屏有声音
  • root忘记密码了怎么办
  • opengl实现光照效果
  • android 自定义
  • perl cgi
  • perl脚本use strict
  • Android HandlerThread 实例
  • nodejs的流处理模块
  • JavaScript中的复杂数据类型又称为
  • 宁夏地税领导班子名单
  • 苏州税务系统
  • 深圳国税系统
  • 税务报道是干什么
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设