美文网首页
RecyclerView item加载动画

RecyclerView item加载动画

作者: 云烟渐成雨 | 来源:发表于2019-08-04 16:35 被阅读0次

    效果图:

    gif.gif

    xml文件

    在res目录下新建文件夹命名为anim,在anim中新建xml文件

    item_anim.xml

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">
    
        <translate
            android:duration="500"
            android:fromXDelta="100%"
            android:fromYDelta="0"
            android:toXDelta="0"
            android:toYDelta="0" />
        <alpha
            android:duration="500"
            android:fromAlpha="0"
            android:toAlpha="1" />
    
    </set>
    
    translate 位置转移动画效果

    整型值:

    • fromXDelta 属性为动画起始时X坐标上的位置
    • toXDelta 属性为动画结束时X坐标上的位置
    • fromYDelta 属性为动画起始时Y坐标上的位置
    • toYDelta 属性为动画结束时Y坐标上的位置

    注意: 没有指定参照物时,默认是以自己为相对参照物

    长整型值:

    • duration 属性为动画持续时间时间以毫秒为单位
    alpha 透明度渐变效果
    • fromAlpha 开始时透明度
    • toAlpha 结束时透明度
    • 数值范围(0~1)

    在Activity或Fragment中

    //设置动画效果
    private void initAnim() {
            //通过加载XML动画设置文件来创建一个Animation对象;
            Animation animation = AnimationUtils.loadAnimation(getContext(), R.anim.item_anim);
            //得到一个LayoutAnimationController对象;
            LayoutAnimationController lac = new LayoutAnimationController(animation);
            //设置控件显示的顺序;
            lac.setOrder(LayoutAnimationController.ORDER_NORMAL);
            //设置控件显示间隔时间;
            lac.setDelay(0.3f);
            //为ListView设置LayoutAnimationController属性;
            mXRecyclerView.setLayoutAnimation(lac);
        }
    

    获取到数据后调用,首次进入和刷新都会触发动画

    public void initRecyclerViewAnim(List<ItemBean> list) {
            initAnim();
            if (list != null && list.size() > 0) {
                if (mAdapter == null) {
                    mAdapter = new RVBeanAdapter(getActivity());
                    getActivity().runOnUiThread(() -> {
                        mXRecyclerView.setAdapter(mAdapter);
                        //刷新逻辑
                        mAdapter.refreshData(list);
                    });
                } else {
                    getActivity().runOnUiThread(() -> mAdapter.refreshData(list));
                }
            }
        }
    
    /**
         * 刷新数据
         *
         * @param data 数据源
         */
        public void refreshData(List<T> data) {
            mList.clear();
            mList.addAll(data);
            notifyDataSetChanged();
        }
    

    demo地址:https://github.com/fr1014/LoadAndRefresh
    注:此次的代码是基于上篇文章(RecyclerView + DataBinding实现的下拉刷新与加载更多)中添加,文章地址:https://www.jianshu.com/p/491dbf93e448

    相关文章

      网友评论

          本文标题:RecyclerView item加载动画

          本文链接:https://www.haomeiwen.com/subject/jpsydctx.html