一个酷炫实用的下拉刷新开源库
2015-09-01 18:44
281 查看
先上图:类似于水滴的下拉刷新效果
![](http://img.blog.csdn.net/20150901181139936?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
Demo下载:点击打开链接(其中项目根目录下的circlerefresh就是该类库)。下面说说如何使用circlerefresh实现下拉刷新功能。
一。搭建工程:(这里以android studio开发环境为例)
下载Demo以获取circlerefresh库,将该库导入项目即可。
二。如何使用:
1.在布局文件中添加如下代码:
2.在对应activity中:
声明控件,适配器,数据对象(跟使用普通的listView过程差不多,也可自定义适配器):
在onCreat()中实例化对象:
至此,运行项目就可以看到下拉刷新的动画效果了(用起来很简单粗暴啊!)
接下来使用hanlder+thread实现刷新逻辑。
首先调用下面的代码绑定circleRefreshLayout 的滑动监听器(note:这里不需要用上listView的监听事件)。
在circleRefreshLayout监听器的refreshing()方法下启动子线程:(当有下拉操作时会自动调用这个方法)
Demo下载:点击打开链接(其中项目根目录下的circlerefresh就是该类库)。下面说说如何使用circlerefresh实现下拉刷新功能。
一。搭建工程:(这里以android studio开发环境为例)
下载Demo以获取circlerefresh库,将该库导入项目即可。
二。如何使用:
1.在布局文件中添加如下代码:
<com.tuesda.walker.circlerefresh.CircleRefreshLayout xmlns:app="http://schemas.android.com/apk/res-auto" app:AniBackColor="#ff8b90af" app:AniForeColor="#ffffffff" app:CircleSmaller="6" android:id="@+id/refresh_layout" android:layout_width="match_parent" android:layout_height="match_parent"> <ListView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/listView"> </ListView> </com.tuesda.walker.circlerefresh.CircleRefreshLayout>circlerefresh继承自FrameLayout,这里相当于将ListView控件放到circlerefreshLayout布局下.
2.在对应activity中:
声明控件,适配器,数据对象(跟使用普通的listView过程差不多,也可自定义适配器):
private CircleRefreshLayout circleRefreshLayout ; private ListView listView ; private ArrayList<String> lists ; private ArrayAdapter<String> adapter ;
在onCreat()中实例化对象:
circleRefreshLayout = (CircleRefreshLayout)findViewById(R.id.refresh_layout) ; listView = (ListView)findViewById(R.id.listView) ; lists = new ArrayList<String>() ; for(int i=0;i<10;i++) { lists.add(i+" ") ; } adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,lists) ; listView.setAdapter(adapter);
至此,运行项目就可以看到下拉刷新的动画效果了(用起来很简单粗暴啊!)
接下来使用hanlder+thread实现刷新逻辑。
首先调用下面的代码绑定circleRefreshLayout 的滑动监听器(note:这里不需要用上listView的监听事件)。
circleRefreshLayout.setOnRefreshListener(new CircleRefreshLayout.OnCircleRefreshListener() { @Override public void completeRefresh() { //do something when completeRefresh Toast.makeText(MainActivity.this, "refresh has complete", Toast.LENGTH_SHORT).show(); } @Override public void refreshing() { //do something when Refreshing Toast.makeText(MainActivity.this, "refreshing", Toast.LENGTH_SHORT).show(); } });定义一个handler处理刷新事件
private Handler myHandler = new Handler() { //接收子线程的信息 public void handleMessage(Message msg) { //根据接收的消息进行相关操作 } } ;定义一个实现Runnable的类,在run()方法内实现刷新内容加载操作(这里直接让子线程睡眠3秒),刷新操作执行完毕后,发送消息,以供主线程中的handler接收消息并进行处理。
private class MyRunnable implements Runnable { @Override public void run() { try { Thread.sleep(3000); lists.add(0,"100"); } catch (InterruptedException e) { e.printStackTrace(); } Message message = new Message() ; message.what = 0 ; myHandler.sendMessage(message) ; } }在Handler的handleMessage()方法(自动接收消息并进行相关处理)下添加代码:
switch(msg.what) { case 0: circleRefreshLayout.finishRefreshing(); break ; }调用circleRefreshLayout.finishRefreshing()方法结束刷新,调用该方法后,会自动回调circleRefreshLayout监听器下的completeRefresh()方法。总的来说这里的逻辑就是开启子线程处理下拉刷新的耗时操作,完成后,handler接收消息,进而结束刷新过程。
在circleRefreshLayout监听器的refreshing()方法下启动子线程:(当有下拉操作时会自动调用这个方法)
public void refreshing() { //do something when Refreshing Toast.makeText(MainActivity.this, "refreshing", Toast.LENGTH_SHORT).show(); //启动子线程,三秒后停止刷新 MyRunnable myRunnable = new MyRunnable() ; new Thread(myRunnable).start(); }下拉操作完成后,在completeRefresh方法内刷新数据:
adapter.notifyDataSetChanged();自此下拉刷新功能已全部完成,运行工程看看这个动画,还不错吧!(如果觉得动画时间过长,所占位置不适,颜色等balabala,可自行在circlerefresh下的AnimationView.java下进行修改。)
相关文章推荐
- 黑马程序员——41,打印流,合并流,对象序列化,管道流,RandomAccessFile
- 打包volley
- ssh+mysql 登陆 及增删改成
- iOS: UIWebView 中不加载图片(即浏览器常见的无图模式)
- linux常用命令(13):less命令
- POJ 题目1436 Horizontally Visible Segments(线段树染色覆盖求相互是否可见)
- 黑马程序员——面向对象(数组工具类+单例设计模式)-第16天
- oracle OCCI编程
- OpenSSL中调用OpenSSL_add_all_algorithms内存泄漏之问题调查
- NYOJ 860 又见01背包(01背包转移方程巧用)
- hdu 3944 DP? lucas定理
- 【AngularJS】—— 12 独立作用域
- JQuery中的DOM操作
- nio文件通道
- leetcode 2: Add Two Numbers
- JAVA之编码/解码 -- 各种环境下可能会发生的乱码问题及解决方案
- Pdf格式文件怎么修改
- poj 1286 Necklace of Beads (polya(旋转+翻转)+模板)
- 周记——20150831
- 海盗分宝石