關於listview的操作五花八門,有下拉刷新,分級顯示,分頁列表,逐頁加載等,以後會陸續和大家分享這些技術,今天講下下拉加載這個功能的實現。
最初的下拉加載應該是ios上的效果,現在很多應用如新浪微博等都加入了這個操作。即下拉listview刷新列表,這無疑是一個非常友好的操作。今天就和大家分享下這個操作的實現。
先看下運行效果:
代碼參考國外朋友Johan Nilsson的實現,主要原理為監聽觸摸和滑動操作,在listview頭部加載一個視圖。那要做的其實很簡單:1.寫好加載到listview頭部的view 2.重寫listview,實現onTouchEvent方法和onScroll方法,監聽滑動狀態。計算headview全部顯示出來即可實行加載動作,加載完成即刷新列表。重新隱藏headview。
首先寫下headview的xml代碼:
[html]
- <RelativeLayout xmlns:Android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:paddingTop="10dip"
- android:paddingBottom="15dip"
- android:gravity="center"
- android:id="@+id/pull_to_refresh_header"
- >
- <ProgressBar
- android:id="@+id/pull_to_refresh_progress"
- android:indeterminate="true"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginLeft="30dip"
- android:layout_marginRight="20dip"
- android:layout_marginTop="10dip"
- android:visibility="gone"
- android:layout_centerVertical="true"
- style="?android:attr/progressBarStyleSmall"
- />
- <ImageView
- android:id="@+id/pull_to_refresh_image"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginLeft="30dip"
- android:layout_marginRight="20dip"
- android:visibility="gone"
- android:layout_gravity="center"
- android:gravity="center"
- android:src="@drawable/ic_pulltorefresh_arrow"
- />
- <TextView
- android:id="@+id/pull_to_refresh_text"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textStyle="bold"
- android:paddingTop="5dip"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:gravity="center"
- />
- <TextView
- android:id="@+id/pull_to_refresh_updated_at"
- android:layout_below="@+id/pull_to_refresh_text"
- android:visibility="gone"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:gravity="center"
- />
- </RelativeLayout>