安卓系列之第三方库 BaseRecyclerViewAdapterHelper 使用篇

3,732 阅读2分钟

在 UI 设计稿有列表的情况下,通常优选 RecyclerView 组件,那么配套使用的就是 RecyclerView.Adapter。第三方库 BaseRecyclerViewAdapterHelper 提供了很好的功能,比如上拉加载,item 动画效果,空布局等。

github 介绍

项目地址

github.com/CymChad/Bas…

说明文档地址

github.com/CymChad/Bas…

最新版本地址

github.com/CymChad/Bas…

练习项目 GitHub 地址

github.com/ElaineTaylo…

基础使用

「参考」 练习项目里的 BaseQuickAdapterActivity 相关。

相关属性

属性功能备注
setList()使用新的数据集合,改变原有数据集合内容不会替换原有的内存引用,只是替换内容

导入方式

  1. 第一步

在项目的 settings.gradle 文件中添加 jitpack

repositories {
    maven { url 'https://jitpack.io' }
}
  1. 第二步

在项目 app 的 build.gradle 文件中添加 BaseRecyclerViewAdapterHelper
「注意」:具体版本号请到官方库查看

//BaseRecyclerViewAdapterHelper
implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0.11'

代码实现列表

  1. BaseQuickAdapterActivity 文件:
package com.elaine.lib_baserecyclerviewadapterhelper.basequickadapterPackage

import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.databinding.DataBindingUtil
import androidx.recyclerview.widget.LinearLayoutManager
import com.elaine.lib_baserecyclerviewadapterhelper.R
import com.elaine.lib_baserecyclerviewadapterhelper.bean.BaseBean
import com.elaine.lib_baserecyclerviewadapterhelper.databinding.ActivityBaseQuickAdapterBinding

/**
 * 基础使用--BaseQuickAdapter
 */
class BaseQuickAdapterActivity : AppCompatActivity() {
    //布局
    private lateinit var mBinding: ActivityBaseQuickAdapterBinding

    //适配器
    private lateinit var baseQuickAdapterAdapter: BaseQuickAdapterAdapter

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        //布局赋值
        mBinding = DataBindingUtil.setContentView(this, R.layout.activity_base_quick_adapter)
        initAdapter()
        initData()
    }

    /**
     * 初始化适配器
     */
    private fun initAdapter() {
        //构建适配器
        baseQuickAdapterAdapter = BaseQuickAdapterAdapter()
        mBinding.rvData.apply {
            //RecycleView设置layoutManager
            layoutManager = LinearLayoutManager(this@BaseQuickAdapterActivity)
            //RecycleView设置adapter
            adapter = baseQuickAdapterAdapter
        }
    }

    /**
     * 填充数据
     */
    private fun initData() {
        //构建数据
        val data: MutableList<BaseBean> = ArrayList()
        for (i in 0..20) {
            val baseBean = BaseBean()
            baseBean.content = "基础使用(BaseQuickAdapter)---数据 $i"
            data.add(baseBean)
        }
        //适配器添加数据
        baseQuickAdapterAdapter.setList(data)
    }
}
  1. BaseQuickAdapterAdapter 文件
package com.elaine.lib_baserecyclerviewadapterhelper.basequickadapterPackage

import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.viewholder.BaseDataBindingHolder
import com.elaine.lib_baserecyclerviewadapterhelper.R
import com.elaine.lib_baserecyclerviewadapterhelper.bean.BaseBean
import com.elaine.lib_baserecyclerviewadapterhelper.databinding.ItemBaseQuickAdapterBinding

/**
 * 基础使用--BaseQuickAdapter
 * 适配器
 */
class BaseQuickAdapterAdapter :
    BaseQuickAdapter<BaseBean?, BaseDataBindingHolder<ItemBaseQuickAdapterBinding>>(R.layout.item_base_quick_adapter) {
    override fun convert(
        holder: BaseDataBindingHolder<ItemBaseQuickAdapterBinding>,
        item: BaseBean?
    ) {
        val mBinding = holder.dataBinding
        if (mBinding != null) {
            //赋值实体
            if (item != null) {
                mBinding.bean = item
            }
            //更新内容
            mBinding.executePendingBindings()
        }
    }
}
  1. BaseBean 文件
package com.elaine.lib_baserecyclerviewadapterhelper.bean

/**
 * 基础实体
 */
class BaseBean {
    //内容
    var content: String? = null
}
  1. activity_base_quick_adapter 文件
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <data>

    </data>

    <androidx.appcompat.widget.LinearLayoutCompat
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".basequickadapterPackage.BaseQuickAdapterActivity">

        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/rv_data"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

    </androidx.appcompat.widget.LinearLayoutCompat>
</layout>
  1. item_base_quick_adapter 文件
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <data>

        <variable
            name="bean"
            type="com.elaine.lib_baserecyclerviewadapterhelper.bean.BaseBean" />

    </data>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:text="@{bean.content}"
            android:textSize="16sp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>

效果图如下

动画效果

「参考」 练习项目里的 AnimationActivity 相关。

相关属性

属性功能
setAnimationWithDefault()使用内置默认动画设置
isAnimationFirstOnly动画是否仅第一次执行
animationEnable是否打开动画
adapterAnimation设置自定义动画

默认动画类型

类型效果
AlphaIn透明度进入
ScaleIn缩放进入
SlideInBottom从底部进入
SlideInLeft从左侧进入
SlideInRight从右侧进入

自定义动画

package com.elaine.lib_baserecyclerviewadapterhelper.animationpackage

import android.animation.Animator
import android.animation.ObjectAnimator
import android.view.View
import android.view.animation.DecelerateInterpolator
import com.chad.library.adapter.base.animation.BaseAnimation

/**
 * 官方demo提供的自定义动画
 * X轴和Y轴从1.3f到1f
 * 同时透明度从0f到1f
 */
class CustomAnimation : BaseAnimation {
    override fun animators(view: View): Array<Animator> {
        //动画
        val scaleY: Animator = ObjectAnimator.ofFloat(view, "scaleY"1.3f1f)
        val scaleX: Animator = ObjectAnimator.ofFloat(view, "scaleX"1.3f1f)
        val alpha: Animator = ObjectAnimator.ofFloat(view, "alpha"0f1f)
        //过度时间
        scaleY.duration = 350
        scaleX.duration = 350
        alpha.duration = 350
        //设置插值器
        scaleY.interpolator = DecelerateInterpolator()
        scaleX.interpolator = DecelerateInterpolator()
        return arrayOf(scaleY, scaleX, alpha)
    }
}

代码实现

//默认动画效果
animationAdapter.setAnimationWithDefault(BaseQuickAdapter.AnimationType.SlideInBottom)
//自定义动画效果
animationAdapter.adapterAnimation = CustomAnimation()
//动画是否执行一次 false--上下滑动都会执行动画;true--出现过的item不再执行动画
animationAdapter.isAnimationFirstOnly = false
//是否有动画效果 true--是;false--否
animationAdapter.animationEnable = true

效果图

  1. AlphaIn 透明度
  2. ScaleIn 缩放
  3. SlideInBottom 从底部进入
  4. SlideInLeft 从左侧进入
  5. SlideInRight 从右侧进入
  6. 自定义动画