位置: 编程技术 - 正文

Android开发开源项目之-PullToRefresh源码分析(安卓开源项目叫什么)

编辑:rootadmin

推荐整理分享Android开发开源项目之-PullToRefresh源码分析(安卓开源项目叫什么),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:android完整开源项目,android开发源码,android 开源,android开发源码,android 开发相关源码精编解析,android开发源码,android开源app,android完整开源项目,内容如对您有帮助,希望把文章链接给更多的朋友!

1.上图为工程目录和Androidmanifest.xml文件。先来说说我们是怎么使用的。首先看布局文件activity_ptr_list.xml。

布局文件很简单,使用方式基本和ListView没区别(其实PullToRefreshListView还是有很多自己的属性的,之后代码中我们会遇到,但这里我们都没有设置任何属性,因为在代码中PullToRefreshListView会有一套默认的属性值)。

继续来看主Activity

3.接下来就进入框架源码的世界了。 当我们执行

mPullRefreshListView = (PullToRefreshListView) findViewById(R.id.pull_refresh_list); 这步时,首先会执行PullToRefreshListView的构造函数。我们先看看继承关系 (1)PullToRefreshListView extends PullToRefreshAdapterViewBase (2)PullToRefreshAdapterViewBase extends PullToRefreshBase (3)PullToRefreshBase extends LinearLayout

所以最后执行的其实是PullToRefreshBase的构造函数

我们看到其实还有另外三个构造函数,但是自定义控件通过xml布局文件映射成控件一般都是调用这个构造函数。

init中主要是获取xml中定义的一些PullToRefresh自身的属性(我们这里没定义,所以使用的都是默认值)。mMode主要区分是下拉刷新、上拉加载或者是二者都可行等。mLoadingAnimationStyle下拉时候左边的图片及动画效果有两种,一种是转圈的图标,一种是一个大箭头,拉倒一定程度会反向。它有个默认值,我们可以通过修改这个默认值来看看效果,修改getDefault()的返回值ROTATE或者FLIP。

然后调用PullToRefreshListView中实现的createRefreshableView函数返回一个ListView的子类,我们暂时不追究具体实现,只需要知道此处返回的是个ListView(所以如果是下拉刷新的WebView那子类实现的一定是返回WebView了)

来看看它是怎么添加的

构造一个FrameLayout的mRefreshableViewWrapper,将这个ListView添加到FrameLayout中,再将mRefreshableViewWrapper添加到当前自定义的这个PullToRefreshListView中。 我们继续分析init函数,接下去构造两个LoadingLayout,一个是下拉刷新时顶部显示的View,另一个是上拉时底部加载显示的View,还记得上面说的mLoadingAnimationStyle吗,它有两种模式,createLoadingLayout内部会根据模式创建不同的LoadingLayout,分别是RotateLoadingLayout和FlipLoadingLayout。这两个LoadingLayout中会定义一些不同的动画效果,比如下拉时的动画,比如刷新时的动画等,这个后面会详细说。

handleStyledAttributes(a);

Android开发开源项目之-PullToRefresh源码分析(安卓开源项目叫什么)

PullToRefreshListView.java中

PullToRefreshAdapterViewBase.java中

见下图右下角有个小箭头,mShowIndicator就是指示这个箭头需不需要显示的,默认不显示。

mListViewExtrasEnabled默认是true,为了不影响主线,我们先将这里改为false,即handleStyledAttributes函数中不会执行,所以我们可以暂时不关心,后面再来说这段的作用。

PullToRefreshAdapterViewBase.java中

PullToRefreshBase.java中

updateUIForMode()中将之前创建的mHeaderLayout和mFooterLayout添加到当前空间中的顶部或者尾部。调整 mHeaderLayout和mFooterLayout的大小,对于我们得PullToRefreshListView来说,需要设置MHeaderLayout 的高度为最大可下拉的高度 这里是控件自身高度的0.6倍。最后为了在不下拉刷新时,顶部的控件不可见且 藏在LitView数据的上方,就设置PullToRefreshListView的padding来隐藏mHeaderLayout。最后如果当前模式 为Mode.BOTH,即支持下拉刷新和上拉加载,就将模式直接改为Mode.PULL_FROM_START。

好了,PullToRefreshListView的初始化就这样结束了,总结一下控件的初始化中主要做了啥。 1.定义了一个ListView 并添加到PullToRefreshListView 2.定义了一个顶部刷新用的LoadingLayout 并添加到头部 3.定义了一个尾部加载用的loadingLayout 并添加到尾部 4.根据传入的属性或默认属性定义了头部Loadinglayout和尾部Loadinglayout的动画效果

关键属性:mMode 支持模式 下拉刷新、上拉加载、二者都支持、 mLoadingAnimationStyle 加载动画效果样式 mScrollingWhileRefreshingEnabled 刷新时是否支持滚动 mShowIndicator 是否显示右下角的小箭头

这些属性都可以在xml布局文件中设置,也可以直接代码中修改默认值 `4.我们回到我们的主Activity中,mPullRefreshListView.setAdapter(mAdapter); 内部其实没有做任何事,只是把adapter设置到我们之前在初始化时定义的ListView中去。

5.接下去就是拖动,这里涉及到android触屏事件的分发机制,不了解的同学建议先去了解下(最好不只是了解,而是跟随代码一步步看下去,别人讲的终究是别人的,只有亲自看看才会印象深刻)。有些知识是连贯的,不然很可能看的时候觉得懂了,看完了发现什么都没留下。 当你手指触屏时,事件会一层层传下来,直到传到我们的PullToRefreshListView(事实上当然不会是我说的这么简单,但是为了不影响对事件机制不了解的同学阅读)。 首先会执行PullToRefreshListView的dispatchTouchEvent函数,PullToRefreshListView并没有定义这个函数,最后调用的还是它的祖宗ViewGroup的dispatchTouchEvent。

再回到PullToRefreshListView的onRefreshing中,当刷新时,会将mHeadLayout隐藏,将ListView中添加的headView显示,并设置滚动距离。 所以mListViewExtrasEnabled这个变量是设置刷新时头部的LoadingLayout是不是ListView的headView的,如果你不希望刷新时的LoadingLayout是ListView的headView那就设置为false吧。添加了headView就会对onitemclick等函数的位置有所影响需要注意。 pulltoRefresh的框架就说到这了,还有很多细节没讲到,大家可以自己在分析分析。第一次写博客,也许有很多错误,也可能写的不好,希望大家多指正。 “`

android的SDK离线安装详细教程

android中实现自动输入文本效果 此控件的功能是帮助用户实现自动输入,例如当用户输入一个字符后,能够根据这个字符提示显示出与之相关的数据。里面用到了一个适配器来实现此

DELPHI XE7XE8 移动开发,Android、iOS XE8下载地址:

标签: 安卓开源项目叫什么

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

上一篇:仿微信语音语音聊天(仿微信语音聊天)

下一篇:android的SDK离线安装详细教程(androidstudio离线配置环境)

  • 服务费收入是什么
  • 公司股东变更需要本人到场吗
  • 非税收入票据可以手写吗
  • 计提税费的会计分录怎么写
  • 劳务报酬所得计税依据是否含增值税收入
  • 小额零星开支税前扣除
  • 供电车间工人薪酬计入什么科目
  • 销售预付卡纳税税率
  • 转让企业全部产权属于增值税征税范围。A对B错
  • 用友怎么设置工龄工资
  • 发票不在业务发生地
  • 每月末计提利息分录
  • 小规模出口企业增值税申报
  • 货款为现金如何做记账账款凭证?
  • 闲置资金怎么说?
  • 简易计税在借方还是贷方
  • 增值税专用发票和普通发票的区别
  • 小规模公司零申报怎么操作流程
  • 合伙企业个人所得税经营所得怎么申报
  • 福利费进项税额转出会计分录账务处理
  • 甲供材项目施工方怎样开票
  • 公司购买房屋涉税问题
  • 银行代扣社保费
  • 建筑安装服务费可以抵扣进项税吗
  • Windows10如何切换中英文输入法
  • 总资产净利率和权益乘数之间的关系
  • windows11搜索
  • 营改增后房地产企业账务处理
  • 在建工程进项税额转出
  • 捐赠与赞助
  • Mtdacq.exe - Mtdacq是什么进程 有什么用
  • 以固定资产换入无形资产
  • 什么是所得税收入
  • 包工包料工程要交哪些税
  • 马蹄莲的养殖方法和注意事项视频
  • uni app怎么样
  • 莱姆 惨败
  • PHP:mcrypt_generic_init()的用法_Mcrypt函数
  • 城市维护建设税计入什么会计科目
  • 悬崖边上的门
  • php框架怎么使用
  • 善意取得虚开增值税专用发票处理
  • k8s安装步骤
  • php web socket
  • php单例模式懒汉和饿汉
  • 适用于windows7的更新程序会更新到windows10吗
  • 税金及附加包括哪些
  • 企业收取的罚款需要交企业所得税吗
  • 匿问我答查人
  • 增值税要计入应收账款吗
  • SQL SERVER 2008 R2 重建索引的方法
  • ERROR CODE: 1175 YOU ARE USING SAFE UPDATE MODE AN
  • 个人所得税手续费奖励办税人员文件
  • 人力资源行业税收优惠
  • 买一赠一涉及企业所得税的处理
  • 公司用卫生纸是干什么的
  • 失控发票补缴税款后又被稽查
  • 不能抵扣的福利费
  • 收取物业费不开发票
  • 所得税费用科目的期末余额应直接转入
  • 发票已认证次月退回
  • 赔付支出包括
  • 小规模主营业务成本是否含税
  • 注册资金没有到位
  • 应交增值税一转出未交增值税
  • 快递做账用什么软件
  • 其他应付款长期挂账违反什么规定
  • win10好几个操作系统
  • 控制windows外观和工作方式
  • ubuntu18.04更新到20.04
  • mac笔记软件推荐
  • 安装centos图形界面
  • WIN10系统中引导修复不工作
  • win10自带的杀软叫什么
  • win10系统下怎么安装caxa2016电子图板 caxa2016电子图板安装详细图文教程
  • win7电脑无限蓝屏怎么解决
  • Screen.sleepTimeout=SleepTimeOut.NeverSleep 禁止屏幕锁屏
  • 更改税务购票员
  • 境外投资收益如何交税
  • 陕西税务电子税务局官网安装
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设