RefreshListView 要继承ListView:
headView的布局文件的根部局最好用LinearLayout:
ListView支持加多个HeadView头布局的。
隐藏头布局:
mHeaderView.setPadding(0, -measuredHeight, 0, 0); //隐藏HeadView。
2、 要想让隐藏的头布局文件随着手指的滑动出来,需要重写: onTouchEvent
StartY = (int) ev.getRawY();
int topPadding = dY - measuredHeight; // 滑动过程中设置Padding的值。
HeadView的布局文件:
<?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:background="#fff"
android:orientation="horizontal" >
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:layout_marginTop="5dp" >
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/common_listview_headview_red_arrow" />
<ProgressBar
android:id="@+id/progress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="invisible" />
</RelativeLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="下拉刷新"
android:textColor="#000"
android:textSize="18sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="3dp"
android:text="2015-03-16"
android:textColor="@android:color/darker_gray"
android:textSize="14sp" />
</LinearLayout>
</LinearLayout>
注意设置Padding时,测量HeadView的高度。
mHeaderView = View.inflate(getContext(), R.layout.refresh_header, null);
addHeaderView(mHeaderView);
// 通知headerView 测量, 测量完毕后能得到HeaderView的高度。
mHeaderView.measure(0, 0);
int measuredHeight = mHeaderView.getMeasuredHeight();
// 设置下拉刷新的headView隐藏起来。
mHeaderView.setPadding(0, -measuredHeight, 0, 0);
判断 headView的 状态, 下拉刷新, 松开刷新,和正在刷新(正在刷新时,注意将move事件中break;):
ImageVIew 的动画,设置好 raUp,和raDown成员变量。:
private void initArrowAnim() {
// 箭头向上的动画。
raUp = new RotateAnimation(0, -180, Animation.RELATIVE_TO_SELF, 0.5f,
Animation.RELATIVE_TO_SELF, 0.5f);
raUp.setDuration(500);
raUp.setFillAfter(true); // 保持动画后的状态。
//箭头向下的动画。
raDown = new RotateAnimation(-180, -360, Animation.RELATIVE_TO_SELF, 0.5f,
Animation.RELATIVE_TO_SELF, 0.5f);
raDown.setDuration(500);
raDown.setFillAfter(true); // 保持动画后的状态。
}
然后,ImageView开启动画。
mivArr.startAnimation(raDown); //开启动画。
mivArr.clearAnimation(); //这个是删除动画。
progressBar的修改:
<ProgressBar
android:id="@+id/progress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:indeterminateDrawable="@drawable/circle_shape" //自定义的drawable;
android:visibility="invisible" />
自定义的drawable:
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="0"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="360" >
<shape
android:innerRadius="12dp"
android:shape="ring"
android:thickness="3dp"
android:useLevel="false" >
<gradient
android:centerColor="#0f0"
android:endColor="#f00"
android:startColor="#fff" />
</shape>
</rotate>