一个酷炫实用的下拉刷新开源库

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a13570320979/article/details/48161703

       先上图:类似于水滴的下拉刷新效果


      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下进行修改。)










猜你喜欢

转载自blog.csdn.net/a13570320979/article/details/48161703