RecyclerView 数据预加载动画

最近在做一款app,由于数据加载量比较大,所以加载时长可能比其他app加载速度稍微慢点, 所以加载动画就少不了,但是加载动画感觉效果不是很理想,最后就做了数据预加载处理,大致思路就是这样的,当数据没有加载出来时候,显示一个布局,布局大致和数据加载完成之后的效果一致,然后给view加上动画效果,一个超棒的数据加载动画就搞定了,不再啰嗦,直接上代码。

1.空布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/white">

    <LinearLayout
        android:layout_width="@dimen/dp_0"
        android:layout_height="@dimen/dp_75"
        android:layout_alignParentLeft="true"
        android:layout_marginTop="@dimen/dp_5"
        android:layout_marginBottom="@dimen/dp_5"
        android:layout_weight="7"
        android:gravity="center_vertical"
        android:orientation="vertical">

        <TextView
            android:id="@+id/txt_title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginRight="@dimen/dp_4"
            android:background="@color/eeeeee"
            android:ellipsize="end"
            android:lineSpacingExtra="@dimen/dp_7"
            android:maxLines="2"
            android:text=""
            android:textColor="@color/black"
            android:textFontWeight="10"
            android:textSize="@dimen/sp_16" />

        <TextView
            android:id="@+id/txt_time"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="@dimen/dp_4"
            android:layout_marginRight="@dimen/dp_4"
            android:background="@color/eeeeee"
            android:maxLines="1"
            android:text=""
            android:textColor="@color/bfbfbf"
            android:textSize="@dimen/sp_12" />

        <TextView
            android:id="@+id/txt_time2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="@dimen/dp_4"
            android:layout_marginRight="@dimen/dp_4"
            android:background="@color/eeeeee"
            android:maxLines="1"
            android:text=""
            android:textColor="@color/bfbfbf"
            android:textSize="@dimen/sp_12" />
    </LinearLayout>

    <com.jjb.weduywb.widget.RoundImage
        android:id="@+id/iv_big"
        android:layout_width="@dimen/dp_0"
        android:layout_height="@dimen/dp_75"
        android:layout_alignParentRight="true"
        android:layout_marginTop="@dimen/dp_5"
        android:layout_marginRight="@dimen/dp_4"
        android:layout_marginBottom="@dimen/dp_5"
        android:layout_weight="3"
        android:background="@color/eeeeee"
        android:scaleType="centerCrop"
        android:visibility="visible" />
</LinearLayout>

2.adapter定义两个变量一个表示有数据的布局,一个表示无数据的布局

private static final int TYPE_ONLY_FONT = 0;//文字

private static final int EMPTY_VIEW = -1;//空布局

3.重写adaper中的getItemViewType的方法

@Override
public int getItemViewType(int position) {
    if (xx) {
       return TYPE_ONLY_FONT;
    }else{
 return EMPTY_VIEW;
}
   
}

4.在adapter中

onCreateViewHolder判断加载布局
if (viewType == TYPE_ONLY_FONT ) {
     有数据的布局
} else if (viewType == EMPTY_VIEW) {
  无数据的布局
}

5.

onBindViewHolder在他中加载数据
if (holder instanceof 有数据HoldView) {
    有数据HoldView
} else if (holder instanceof 无数据HoldView) {
 无数据HoldView
} 

6.

getItemCount

中判断数据是否为空人然后加载数据,如果为空默认加载上几条数据,不然加载效果无法出现

7.空数据中页面显示

private class NoItemHoldView extends RecyclerView.ViewHolder {
    TextView txtTitle;
    TextView txtTime;
    TextView txtTime2;
    RoundImage imageView;

    public NoItemHoldView(View itemView) {
        super(itemView);
        txtTitle = itemView.findViewById(R.id.txt_title);
        txtTime = itemView.findViewById(R.id.txt_time);
        txtTime2 = itemView.findViewById(R.id.txt_time2);
        imageView = itemView.findViewById(R.id.iv_big);

        alphaAnimation1.setDuration(1000);
        alphaAnimation1.setRepeatCount(Animation.INFINITE);
        alphaAnimation1.setRepeatMode(Animation.RESTART);
        txtTitle.setAnimation(alphaAnimation1);
        txtTime.setAnimation(alphaAnimation1);
       // txtTime2.setAnimation(alphaAnimation1);
        imageView.setAnimation(alphaAnimation1);
        alphaAnimation1.start();

    }
}

到此一个漂亮的加载效果就出现了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值