zoukankan      html  css  js  c++  java
  • Android下拉刷新完全解析,教你如何一分钟实现下拉刷新功能

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/9255575

    最近项目中需要用到ListView下拉刷新的功能,一开始想图省事,在网上直接找一个现成的,可是尝试了网上多个版本的下拉刷新之后发现效果都不怎么理想。有些是因为功能不完整或有Bug,有些是因为使用起来太复杂,十全十美的还真没找到。因此我也是放弃了在网上找现成代码的想法,自己花功夫编写了一种非常简单的下拉刷新实现方案,现在拿出来和大家分享一下。相信在阅读完本篇文章之后,大家都可以在自己的项目中一分钟引入下拉刷新功能。

    首先讲一下实现原理。这里我们将采取的方案是使用组合View的方式,先自定义一个布局继承自LinearLayout,然后在这个布局中加入下拉头和ListView这两个子元素,并让这两个子元素纵向排列。初始化的时候,让下拉头向上偏移出屏幕,这样我们看到的就只有ListView了。然后对ListView的touch事件进行监听,如果当前ListView已经滚动到顶部并且手指还在向下拉的话,那就将下拉头显示出来,松手后进行刷新操作,并将下拉头隐藏。原理示意图如下:

                                

    那我们现在就来动手实现一下,新建一个项目起名叫PullToRefreshTest,先在项目中定义一个下拉头的布局文件pull_to_refresh.xml,代码如下所示:

    [html] view plaincopy

    1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    2.     xmlns:tools="http://schemas.android.com/tools"  
    3.     android:id="@+id/pull_to_refresh_head"  
    4.     android:layout_width="fill_parent"  
    5.     android:layout_height="60dip" >  
    6.   
    7.     <LinearLayout  
    8.         android:layout_width="200dip"  
    9.         android:layout_height="60dip"  
    10.         android:layout_centerInParent="true"  
    11.         android:orientation="horizontal" >  
    12.   
    13.         <RelativeLayout  
    14.             android:layout_width="0dip"  
    15.             android:layout_height="60dip"  
    16.             android:layout_weight="3"  
    17.             >  
    18.             <ImageView   
    19.                 android:id="@+id/arrow"  
    20.                 android:layout_width="wrap_content"  
    21.                 android:layout_height="wrap_content"  
    22.                 android:layout_centerInParent="true"  
    23.                 android:src="@drawable/arrow"  
    24.                 />  
    25.             <ProgressBar   
    26.                 android:id="@+id/progress_bar"  
    27.                 android:layout_width="30dip"  
    28.                 android:layout_height="30dip"  
    29.                 android:layout_centerInParent="true"  
    30.                 android:visibility="gone"  
    31.                 />  
    32.         </RelativeLayout>  
    33.   
    34.         <LinearLayout  
    35.             android:layout_width="0dip"  
    36.             android:layout_height="60dip"  
    37.             android:layout_weight="12"  
    38.             android:orientation="vertical" >  
    39.   
    40.             <TextView  
    41.                 android:id="@+id/description"  
    42.                 android:layout_width="fill_parent"  
    43.                 android:layout_height="0dip"  
    44.                 android:layout_weight="1"  
    45.                 android:gravity="center_horizontal|bottom"  
    46.                 android:text="@string/pull_to_refresh" />  
    47.   
    48.             <TextView  
    49.                 android:id="@+id/updated_at"  
    50.                 android:layout_width="fill_parent"  
    51.                 android:layout_height="0dip"  
    52.                 android:layout_weight="1"  
    53.                 android:gravity="center_horizontal|top"  
    54.                 android:text="@string/updated_at" />  
    55.         </LinearLayout>  
    56.     </LinearLayout>  
    57.   
    58. </RelativeLayout>  

    在这个布局中,我们包含了一个下拉指示箭头,一个下拉状态文字提示,和一个上次更新的时间。当然,还有一个隐藏的旋转进度条,只有正在刷新的时候我们才会将它显示出来。
    布局中所有引用的字符串我们都放在strings.xml中,如下所示:

    [html] view plaincopy

    1. <?xml.relpost{clear:both}

    Tag:

    Freenovo 发表于2013-08-19 21:03:00 | 编辑 | 分享 0

    引用地址:

  • 相关阅读:
    Golang调用windows下的dll动态库中的函数
    Golang 编译成 DLL 文件
    go 通过nginx代理后获取用户ip
    idea教程--Maven 骨架介绍
    idea教程--快速插入依赖
    Java开发名词解释
    Android Studio安装
    Java基础--Eclipse关联Java源码
    【排序基础】3、随机生成排序算法 测试用例
    【排序基础】2、使用模板(泛型)编写选择排序算法
  • 原文地址:https://www.cnblogs.com/freenovo/p/4469806.html
Copyright © 2011-2022 走看看