Android--Demo_PullToRefresh(进阶篇)
2016-06-14 18:42
405 查看
转载请标明出处:http://write.blog.csdn.net/postedit/51673885
Demo_PullToRefresh(基础篇)
Demo_PullToRefresh(特效篇)
这节我们试着去修改下拉和上拉的样式
首先,我们开下PullTorefresh中的attrs
打开PullTorefresh-->res-->values-->attrs.xml
查看attrs.xml源码
我们按照这个attrs来测试
显示测试上面的修改颜色的几个属性
在布局文件中添加
然后设置
对应的颜色:
为了显示上次刷新时间,我们修改一下上次写的代码,在执行下拉上拉时获取当前时间。
然后我们看下效果图
至于ptrMode和代码写的一样,我就不再做演示了
再看
ptr:ptrShowIndicator="true"
默认是false这个东西就是右侧的一个箭头(上下都有,本人觉得没什么卵用,不美观)
再看
ptr:ptrDrawable = "@mipmap/ic_launcher"
我这懒得找图片了,就继续委屈我们的机器人君了
剩下的ptrDrawableStart(设置头部图片)和ptrDrawableEnd(设置底部图片)是单独设置不同图片用的
再看
ptr:ptrScrollingWhileRefreshingEnabled = "true"
默认为false,这个属性是设置在刷新的时候,列表可否滑动,不做演示了。
再看
ptr:ptrListViewExtrasEnabled="false"
默认为true,这个属性是决定了Header,Footer以何种方式加入mPullToRefreshListView,true为刷新时Header,Footer会紧跟着列表
怎么理解呢,还是上图吧以上面的图为例,底部刷新的时候,默认的是紧跟着listView,在数据量大的情况下我们看不出有什么不妥,然而数据量小的情况下(如下图做左),我们会发现很不和谐,这时候这个属性就派上用场了。设置为false后(下图右),我们会发现,它永远都在底部了。
再看
ptr:ptrRotateDrawableWhilePulling = "true"
默认为true,这个属性,在我看来是很鸡肋的一个,true的时候在拉动的时候不限制旋转角度,并且给人一种越拉阻力越大的感觉;false的时候在拉动的时候最多旋转180度,没有给人越拉阻力越大的感觉。
还是上图解释吧,还是这个图(下图左,默认为true),再看设置为false的情况(下图右)
只搞懂了这么多,剩下的只能说我没搞懂了= =(另外上面的属性都可以在代码中设置)
补充:(这个Demo中没有,自己补充吧,因为是后来想起来的)
当是下列情况时,属性为
ptr:ptrDrawable="@null"<!-- 或者是不设置该属性 -->
ptr:ptrAnimationStyle = "flip"
Demo地址:http://download.csdn.net/detail/skyunicorn/9549792
Demo_PullToRefresh(基础篇)
Demo_PullToRefresh(特效篇)
这节我们试着去修改下拉和上拉的样式
首先,我们开下PullTorefresh中的attrs
打开PullTorefresh-->res-->values-->attrs.xml
查看attrs.xml源码
<?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="PullToRefresh"> <!-- A drawable to use as the background of the Refreshable View --> <!-- 设置整个刷新列表的背景色 --> <attr name="ptrRefreshableViewBackground" format="reference|color" /> <!-- A drawable to use as the background of the Header and Footer Loading Views --> <!-- 设置下拉Header或者上拉Footer的背景色 --> <attr name="ptrHeaderBackground" format="reference|color" /> <!-- Text Color of the Header and Footer Loading Views --> <!-- 用于设置Header与Footer中文本的颜色 --> <attr name="ptrHeaderTextColor" format="reference|color" /> <!-- Text Color of the Header and Footer Loading Views Sub Header --> <!-- 用于设置Header与Footer中上次刷新时间的颜色 --> <attr name="ptrHeaderSubTextColor" format="reference|color" /> <!-- Mode of Pull-to-Refresh that should be used --> <attr name="ptrMode"> <flag name="disabled" value="0x0" /><!-- 禁用下拉刷新 --> <flag name="pullFromStart" value="0x1" /><!-- 仅支持下拉刷新 --> <flag name="pullFromEnd" value="0x2" /><!-- 仅支持上拉刷新 --> <flag name="both" value="0x3" /><!-- 上拉刷新和下拉刷新都支持 --> <flag name="manualOnly" value="0x4" /><!-- 只允许手动触发 --> <!-- These last two are depreacted --> <flag name="pullDownFromTop" value="0x1" /><!-- 已过时,被pullFromStart替代 --> <flag name="pullUpFromBottom" value="0x2" /><!-- 已过时,被pullFromEnd替代 --> </attr> <!-- Whether the Indicator overlay(s) should be used --> <!-- 如果为true会在mPullRefreshListView中出现icon,右上角和右下角,挺有意思的 --> <attr name="ptrShowIndicator" format="reference|boolean" /> <!-- Drawable to use as Loading Indicator. Changes both Header and Footer. --> <!-- 同时改变头部和底部的图标 --> <attr name="ptrDrawable" format="reference" /> <!-- Drawable to use as Loading Indicator in the Header View. Overrides value set in ptrDrawable. --> <!-- 头部视图的图标--> <attr name="ptrDrawableStart" format="reference" /> <!-- Drawable to use as Loading Indicator in the Footer View. Overrides value set in ptrDrawable. --> <!-- 底部视图的图标 --> <attr name="ptrDrawableEnd" format="reference" /> <!-- Whether Android's built-in Over Scroll should be utilised for Pull-to-Refresh. --> <attr name="ptrOverScroll" format="reference|boolean" /> <!-- Base text color, typeface, size, and style for Header and Footer Loading Views --> <!-- 分别设置下拉Header或者上拉Footer中字体的类型颜色等等 --> <attr name="ptrHeaderTextAppearance" format="reference" /> <!-- Base text color, typeface, size, and style for Header and Footer Loading Views Sub Header --> <attr name="ptrSubHeaderTextAppearance" format="reference" /> <!-- Style of Animation should be used displayed when pulling. --> <attr name="ptrAnimationStyle"> <flag name="rotate" value="0x0" /><!-- rotate(旋转动画)--> <flag name="flip" value="0x1" /><!-- flip(翻转动画)--> </attr> <!-- Whether the user can scroll while the View is Refreshing --> <!-- 刷新的时候,是否允许ListView或GridView滚动 --> <attr name="ptrScrollingWhileRefreshingEnabled" format="reference|boolean" /> <!-- Whether PullToRefreshListView has it's extras enabled. This allows the user to be able to scroll while refreshing, and behaves better. It acheives this by adding Header and/or Footer Views to the ListView. --> <!-- 决定了Header,Footer以何种方式加入mPullRefreshListView,true为刷新时Header,Footer会紧跟着列表 --> <attr name="ptrListViewExtrasEnabled" format="reference|boolean" /> <!-- Whether the Drawable should be continually rotated as you pull. This only takes effect when using the 'Rotate' Animation Style. --> <attr name="ptrRotateDrawableWhilePulling" format="reference|boolean" /> <!-- BELOW HERE ARE DEPRECEATED. DO NOT USE. --> <attr name="ptrAdapterViewBackground" format="reference|color" /> <attr name="ptrDrawableTop" format="reference" /> <attr name="ptrDrawableBottom" format="reference" /> </declare-styleable> </resources>
我们按照这个attrs来测试
显示测试上面的修改颜色的几个属性
在布局文件中添加
xmlns:ptr="http://schemas.android.com/apk/res-auto"
然后设置
<com.handmark.pulltorefresh.library.PullToRefreshListView android:id="@+id/pull_to_refresh" android:layout_width="match_parent" android:layout_height="match_parent" ptr:ptrRefreshableViewBackground = "#ff0" ptr:ptrHeaderBackground = "#0ff" ptr:ptrHeaderTextColor = "#f0f" ptr:ptrHeaderSubTextColor = "#f00" />
对应的颜色:
为了显示上次刷新时间,我们修改一下上次写的代码,在执行下拉上拉时获取当前时间。
private void initRefresh() { /* * Mode.BOTH:同时支持上拉下拉 * Mode.PULL_FROM_START:只支持下拉Pulling Down * Mode.PULL_FROM_END:只支持上拉Pulling Up * Mode.DISABLED:禁用下拉刷新和上拉加载 * Mode.MANUAL_REFRESH_ONLY:只允许手动触发 */ /* * 如果Mode设置成Mode.BOTH,需要设置刷新Listener为OnRefreshListener2,并实现onPullDownToRefresh()、onPullUpToRefresh()两个方法。 * 如果Mode设置成Mode.PULL_FROM_START或Mode.PULL_FROM_END,需要设置刷新Listener为OnRefreshListener,同时实现onRefresh()方法。 * 当然也可以设置为OnRefreshListener2,但是Mode.PULL_FROM_START的时候只调用onPullDownToRefresh()方法, * Mode.PULL_FROM_END的时候只调用onPullUpToRefresh()方法. * 我一般用OnRefreshListener2,因为分工比较清楚 */ mPullToRefreshListView.setMode(PullToRefreshBase.Mode.BOTH); mPullToRefreshListView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() { // 下拉刷新 @Override public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) { // 获取上次刷新时间 String str = DateUtils.formatDateTime(ListActivity.this, System.currentTimeMillis(), DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_ABBREV_ALL); /* * getLoadingLayoutProxy(final boolean includeStart, final boolean includeEnd) * 用于指定显示的标签,第一个是改变头部,第二个是改变底部 */ ILoadingLayout startLoading = mPullToRefreshListView.getLoadingLayoutProxy( true, false); startLoading.setPullLabel("下拉刷新");// 刚下拉时显示的提示 startLoading.setRefreshingLabel("拼命刷新中...");// 刷新时显示的提示 startLoading.setReleaseLabel("释放即可刷新");// 下拉达到一定距离时显示的提示 startLoading.setLastUpdatedLabel("最后加载时间:" + str); // 设置一秒后停止刷新(本地设置假数据,时间太短,会导致数据更新后,依旧显示刷新中) mPullToRefreshListView.postDelayed(new Runnable() { @Override public void run() { // 停止刷新 mPullToRefreshListView.onRefreshComplete(); // 加载数据 initDownLv(); // 刷新适配器中的数据 myAdapter.notifyDataSetChanged(); } }, 1000); } // 上拉加载更多 @Override public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) { // 获取上次刷新时间 String str = DateUtils.formatDateTime(ListActivity.this, System.currentTimeMillis(), DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_ABBREV_ALL); ILoadingLayout endLoading = mPullToRefreshListView.getLoadingLayoutProxy(false, true); endLoading.setPullLabel("上拉加载更多");// 刚上拉时显示的提示 endLoading.setRefreshingLabel("拼命加载中...");// 加载时的提示 endLoading.setReleaseLabel("释放即可加载");// 上拉达到一定距离时显示的提示 endLoading.setLastUpdatedLabel("最后加载时间:" + str); // 设置一秒后停止刷新(本地设置假数据,时间太短,会导致数据更新后,依旧显示刷新中) mPullToRefreshListView.postDelayed(new Runnable() { @Override public void run() { // 停止刷新 mPullToRefreshListView.onRefreshComplete(); // 加载数据 initUpLv(); // 刷新适配器中的数据 myAdapter.notifyDataSetChanged(); } }, 1000); } }); }
然后我们看下效果图
至于ptrMode和代码写的一样,我就不再做演示了
再看
ptr:ptrShowIndicator="true"
默认是false这个东西就是右侧的一个箭头(上下都有,本人觉得没什么卵用,不美观)
再看
ptr:ptrDrawable = "@mipmap/ic_launcher"
我这懒得找图片了,就继续委屈我们的机器人君了
剩下的ptrDrawableStart(设置头部图片)和ptrDrawableEnd(设置底部图片)是单独设置不同图片用的
再看
ptr:ptrScrollingWhileRefreshingEnabled = "true"
默认为false,这个属性是设置在刷新的时候,列表可否滑动,不做演示了。
再看
ptr:ptrListViewExtrasEnabled="false"
默认为true,这个属性是决定了Header,Footer以何种方式加入mPullToRefreshListView,true为刷新时Header,Footer会紧跟着列表
怎么理解呢,还是上图吧以上面的图为例,底部刷新的时候,默认的是紧跟着listView,在数据量大的情况下我们看不出有什么不妥,然而数据量小的情况下(如下图做左),我们会发现很不和谐,这时候这个属性就派上用场了。设置为false后(下图右),我们会发现,它永远都在底部了。
再看
ptr:ptrRotateDrawableWhilePulling = "true"
默认为true,这个属性,在我看来是很鸡肋的一个,true的时候在拉动的时候不限制旋转角度,并且给人一种越拉阻力越大的感觉;false的时候在拉动的时候最多旋转180度,没有给人越拉阻力越大的感觉。
还是上图解释吧,还是这个图(下图左,默认为true),再看设置为false的情况(下图右)
只搞懂了这么多,剩下的只能说我没搞懂了= =(另外上面的属性都可以在代码中设置)
补充:(这个Demo中没有,自己补充吧,因为是后来想起来的)
当是下列情况时,属性为
ptr:ptrDrawable="@null"<!-- 或者是不设置该属性 -->
ptr:ptrAnimationStyle = "flip"
Demo地址:http://download.csdn.net/detail/skyunicorn/9549792
相关文章推荐
- 分享Android中pullToRefresh的使用心得
- PullToRefreshListView 应用讲解
- PullToRefresh开源库
- Android实际开发问题02------PullToRefresh
- 所闻所获3:下拉刷新控件1
- 所闻所获4:下拉刷新控件2
- 下拉刷新控件
- 安卓 解决PullToRefresh 无法导入到elcipse 的方法
- Android学习笔记——Android PullToRefresh (ListView,GridView 下拉刷新) 使用介绍
- PullToRefreshLibrary设置label提示信息注意点
- android开源框架之PullToRefresh概述
- (一) 两个接口(IPullToRefresh、ILoadingLayout)与一个基类(PullToRefreshBase)
- (二) 以PullToRefreshListView为例,讲解PullToRefresh中的View初始化操作
- Android listView 动态加载数据,下拉加载数据,上拉加载数据
- Android PullToRefresh (ListView GridView 下拉刷新) 使用详解
- Android PullToRefresh (ListView GridView 下拉刷新) 使用详解
- PullToRefresh扩展为上拉加载和下拉刷新
- pulltorefresh自动刷新
- Android下拉刷新
- 自定义PullToRefresh HeadLayout