`

android之官方下拉刷新组件SwipeRefreshLayout

阅读更多

文章来源:http://www.itnose.net/detail/6252749.html

 

一、问题描述

  在android开发中,使用最多的数据刷新方式就是下拉刷新了,而完成此功能我们使用最多的就是第三方的开源库 PullToRefresh。现如今,google也忍不住推出了自己的下拉组件SwipeRefreshLayout,下面我们通过api文档和源码来 分析学习如何使用SwipeRefreshLayout。

 

  先看效果图:

 

android之官方下拉刷新组件SwipeRefreshLayout0android之官方下拉刷新组件SwipeRefreshLayout1

 

二、SwipeRefreshLayout的具体用法

 

  下面我们来看SwipeRefreshLayout的具体用法,顾名思义此组件就是一个布局,只不过要注意的是此布局内只能有一个直接子View。其实通过文档我们可以知道SwipeRefreshLayout只不过是继承了ViewGroup。

 

  查看文档,我们可以知道,在SwipRefreshLayout中存在一个接口,通过此接口我们可以监听滑动手势,其实使用此组件最重要的步骤就是实现此接口的onRefresh方法,在此方法中实现数据的更新操作。如下:

 

android之官方下拉刷新组件SwipeRefreshLayout2

 

  接口中的方法:

 

 android之官方下拉刷新组件SwipeRefreshLayout3

 

  除了OnRefreshListener接口外,SwipRefreshLayout中还有一些其他重要的方法,具体如下:

 

         1、setOnRefreshListener(SwipeRefreshLayout.OnRefreshListener listener):设置手势滑动监听器。

 

         2、setProgressBackgroundColor(int colorRes):设置进度圈的背景色。

 

         3、setColorSchemeResources(int… colorResIds):设置进度动画的颜色。

 

         4、setRefreshing(Boolean refreshing):设置组件的刷洗状态。

 

         5、setSize(int size):设置进度圈的大小,只有两个值:DEFAULT、LARGE

 

  弄清楚API后,我们下面进行实际编码,首先先做布局,具体内容如下:

 

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.SwipeRefreshLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:id="@+id/swipeLayout" >
     
    <ListView 
        android:id="@+id/mylist"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
    
</android.support.v4.widget.SwipeRefreshLayout>

 

  Activity核心代码如下:

 

swipeRefreshLayout = (SwipeRefreshLayout)findViewById(R.id.swipeLayout);

        swipeRefreshLayout.setColorSchemeResources(R.color.swipe_color_1,
                R.color.swipe_color_2,
                R.color.swipe_color_3,
                R.color.swipe_color_4);
        swipeRefreshLayout.setSize(SwipeRefreshLayout.LARGE);;
        swipeRefreshLayout.setProgressBackgroundColor(R.color.swipe_background_color);
        //swipeRefreshLayout.setPadding(20, 20, 20, 20);
        //swipeRefreshLayout.setProgressViewOffset(true, 100, 200);
        //swipeRefreshLayout.setDistanceToTriggerSync(50);
        swipeRefreshLayout.setProgressViewEndTarget(true, 100);
        swipeRefreshLayout.setOnRefreshListener(new OnRefreshListener() {
            @Override
            public void onRefresh() {
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        data.clear();
                        for(int i=0;i<20;i++){
                            data.add("SwipeRefreshLayout下拉刷新"+i);
                        }
                        try {
                            Thread.sleep(5000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                        mHandler.sendEmptyMessage(1);
                    }
                }).start();
            }
        });
    //handler
    private Handler mHandler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what) {
            case 1:
                
                swipeRefreshLayout.setRefreshing(false);
                adapter.notifyDataSetChanged();
                //swipeRefreshLayout.setEnabled(false);
                break;
            default:
                break;
            }
        }
    };

 

  通过如上步骤,我们就实现了一个简单的下拉刷新操作,在此基础上,我们可以分析研究一下SwipeRefreshLayout是如何实现的。

 

  通过源码我们发现SwipeRefreshLayout中的两个重要的属性:

 

private MaterialProgressDrawable mProgress;

 

private CircleImageView mCircleView;

 

  这两个属性正是用于实现进度动画效果的,在方法createProgressView中,我们看到mCircleView最终加入到了SwipeRefreshLayout中。

 

private void createProgressView() {
        mCircleView = new CircleImageView(getContext(), CIRCLE_BG_LIGHT, CIRCLE_DIAMETER/2);
        mProgress = new MaterialProgressDrawable(getContext(), this);
        mProgress.setBackgroundColor(CIRCLE_BG_LIGHT);
        mCircleView.setImageDrawable(mProgress);
        mCircleView.setVisibility(View.GONE);
        addView(mCircleView);
    }

 

  同时我们也可以查看到CirlceImageView继承了ImageView,MaterialProgressDrawabel继承了Drawable,至此我们也就明白了下来进度动画是如何实现的了,具体的细节在不做过多赘述,可自行查看源码

 

class CircleImageView extends ImageView

 

class MaterialProgressDrawable extends Drawable implements Animatable

 

  具体的下拉功能实现主要是在onInterceptTouchEvent、onTouchEvent方法中完成的,在此我就不在将具体代码贴出来了,大家可自行查看。

 

 

 

  想要进一步了解的同学,可以下载完整工程,自行运行查看!有问题也可以跟帖讨论哦~


更多相关文章:http://www.itnose.net/st/6252749.html

分享到:
评论

相关推荐

    Android官方下拉刷新组件——swipeRefreshLayout

    在Android开发中,`SwipeRefreshLayout`是Google官方提供的一款用于实现下拉刷新功能的组件,它使得用户可以通过从顶部向下滑动来触发刷新操作。这个组件通常与`RecyclerView`或`ListView`等滚动视图结合使用,以...

    Google官方下拉刷新组件SwipeRefreshLayout(Google最新控件)

    **谷歌官方下拉刷新组件SwipeRefreshLayout详解** 在Android开发中,提供流畅的用户体验是至关重要的,其中下拉刷新功能已经成为许多应用的标准特性。Google官方为了方便开发者实现这一功能,推出了...

    Google官方下拉刷新组件SwipeRefreshLayout

    SwipeRefreshLayout字面意思就是下拉刷新的布局,继承自ViewGroup,在... 提到下拉刷新大家一定对ActionBarPullToRefresh比较熟悉,而如今google推出了更官方的下拉刷新组件,这无疑是对开发者来说比较好的消息。

    Android高级应用源码-Google官方下拉刷新组件SwipeRefreshLayout(Google最新控件).zip

    【Android高级应用源码-Google官方下拉刷新组件SwipeRefreshLayout】是Google为Android开发者提供的一种先进的用户界面组件,主要用于实现下拉刷新的功能。这个组件在许多现代Android应用中被广泛使用,因为它提供了...

    安卓下拉上拉刷新相关-Google官方下拉刷新组件SwipeRefreshLayout(Google最新控件).rar

    `SwipeRefreshLayout`是Google官方提供的一款用于实现下拉刷新功能的组件,它为许多应用提供了统一且流畅的刷新体验。这个压缩包包含了一些与`SwipeRefreshLayout`相关的源码和资源文件,供开发者学习和参考。 `...

    Android之SwipeRefreshLayout下拉刷新组件

    在Android应用开发中,`SwipeRefreshLayout`是一个非常重要的组件,它是Google官方提供的一个下拉刷新布局,用于实现类似微博、微信等应用中的下拉刷新功能。这个组件使得用户可以通过简单的手势,即从顶部向下滑动...

    SwipeRefreshLayout Android系统自带下拉刷新demo

    在Android开发中,`SwipeRefreshLayout` 是一个非常重要的组件,它是Android SDK中内置的一个控件,主要用于实现下拉刷新的功能。这个控件的设计目的是让用户在查看列表或网格内容时能够轻松地更新数据。下面我们将...

    Android 开源的下拉刷新 Eclipse版本

    在这个开源项目中,它可能包含了如何使用这些下拉刷新组件的示例代码,帮助开发者了解如何在自己的应用中集成和使用这些组件。 七、集成和使用 在Eclipse中,开发者需要将提供的库导入到项目中,然后在需要下拉刷新...

    Android官方下拉刷新控件SwipeRefreshLayout使用详解

    在Android应用开发中,下拉刷新功能已经成为许多应用的标准特性,Android官方提供了SwipeRefreshLayout控件,使得开发者可以方便地集成这一功能。本文将详细介绍SwipeRefreshLayout的使用方法,并通过实例展示其工作...

    Google官方下拉刷新组件

    在Android应用开发中,为用户提供流畅的刷新体验是至关重要的,这使得谷歌推出了官方的下拉刷新组件——`SwipeRefreshLayout`。这个组件旨在提供一个标准的方式,让用户通过简单的下拉手势触发刷新操作,常见于新闻...

    Android例子源码谷歌下拉刷新SwipeRefreshLayout修改版.zip

    本项目是一个Google官方的一个下拉刷新的修改版,SwipeRefreshLayout是Google在support v4 19.1版本的library更新的一个下拉刷新组件,实现刷新效果更方便。本项目是在原有基础上添加了上拉刷新,不过貌似不是太完善...

    下拉刷新与上拉加载更多SwipeRefreshLayout

    "下拉刷新与上拉加载更多SwipeRefreshLayout"是Android SDK提供的一种组件,用于实现这两种操作,为用户提供更加流畅的数据获取体验。本文将深入探讨这一组件的工作原理、使用方法及其扩展——...

    安卓Android源码——下拉刷新控件(ListView好ScrollView版).rar

    - 首先,在布局文件中添加SwipeRefreshLayout或自定义的下拉刷新组件。 - 然后,设置刷新监听器,如`SwipeRefreshLayout.OnRefreshListener`,并在`onRefresh()`方法中执行数据更新操作。 - 最后,根据数据加载的...

    Android自带下拉刷新的代码例子

    总结一下,`SwipeRefreshLayout`是Android原生提供的一个强大的下拉刷新组件,它可以轻松地与滚动视图配合使用,提供一致的用户体验。通过设置监听器和自定义刷新逻辑,你可以轻松地将下拉刷新功能集成到自己的应用...

    Google官网下拉刷新SwipeRefreshLayout

    在Android开发中,下拉刷新(Pull-to-Refresh)功能是一项常见的用户交互设计,它允许用户通过在列表顶部向下拖动来更新数据。Google为此提供了一个官方的组件——`SwipeRefreshLayout`,它使得开发者能够轻松地在...

    android原装下拉刷新控件--SwipeRefreshLayout

    在Android开发中,`SwipeRefreshLayout`是谷歌官方提供的一个用于实现下拉刷新功能的控件。这个控件允许用户通过从顶部向下滑动来触发刷新操作,常见于新闻、社交媒体等应用的列表视图中。下面我们将深入探讨`...

    Android 之WebView实现下拉刷新和其他相关刷新功能

    实现WebView的下拉刷新功能,我们可以利用Android的SwipeRefreshLayout控件。SwipeRefreshLayout是Android SDK提供的一种可以包裹其他ViewGroup,尤其是ListView、GridView、RecyclerView等的容器,当用户下拉时,它...

    Android应用源码 ListView下拉刷新 Demo

    1. **SwipeRefreshLayout**:Android SDK 提供了一个名为SwipeRefreshLayout的布局容器,它是实现下拉刷新的关键。这个容器可以包含一个子视图,通常是一个ListView或者RecyclerView。当用户从顶部下拉时,...

    Android开发丶谷歌官方刷新控件SwipeRefreshLayout下拉刷新的实现和上拉加载的拓展

    通过以上方式,我们可以将SwipeRefreshLayout从单纯的下拉刷新控件拓展为既能下拉刷新又能上拉加载的组件。这种设计提高了应用的可复用性和用户体验,使得用户在查看内容时更加便捷。在实际项目中,可以根据具体需求...

Global site tag (gtag.js) - Google Analytics