現在QQ空間和新浪微博ListView下拉刷新做的比較炫,正好公司也有這樣的需求,實現起來還是相對簡單的。關鍵是要自定義一個ListView頭部(初始化的時候裡面的控件是不可見的),然後在點擊、拖動、松開的時候觸發事件,顯示ListView頭,計算出拖拽的距離,跟ListView頭的高度做比較,以此來顯示對應的ListView頭裡的控件(下拉圖標、提示文字、圓形進度條等)。好了,下面貼出效果圖:
好,開始上代碼,先是布局文件main.xml,沒什麼好說的:
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:Android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:orientation="vertical"
- android:background="@color/mainColor" >
-
- <!-- 這裡是自定義的ListView -->
- <com.focustech.android.CustomListView
- android:id="@+id/list"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- />
-
- </LinearLayout>
ListView頭布局head.xml:
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical" >
-
- <RelativeLayout
- android:id="@+id/head_contentLayout"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:paddingLeft="30dp" >
-
- <FrameLayout
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignParentLeft="true"
- android:layout_centerVertical="true" >
-
- <ImageView
- android:id="@+id/head_arrowImageView"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:src="@drawable/ic_pulltorefresh_arrow" />
-
- <ProgressBar
- android:id="@+id/head_progressBar"
- style="?android:attr/progressBarStyleSmall"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:visibility="gone" />
- </FrameLayout>
-
- <LinearLayout
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_centerHorizontal="true"
- android:gravity="center_horizontal"
- android:orientation="vertical" >
-
- <TextView
- android:id="@+id/head_tipsTextView"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="下拉可以刷新"
- android:textColor="#ffffff"
- android:textSize="20sp" />
-
- <TextView
- android:id="@+id/head_lastUpdatedTextView"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="最近更新"
- android:textColor="#cc6600"
- android:textSize="10sp" />
-
- </LinearLayout>
- </RelativeLayout>
-
-
- </LinearLayout>