RefreshListView listView的下拉刷新

本文介绍了一种基于ListView的RefreshListView实现方式,包括自定义头部视图、处理触摸事件来实现下拉刷新功能,以及如何通过动画效果增强用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值