• XamarinAndroid组件教程RecylerView动画组件使用动画(2)


    XamarinAndroid组件教程RecylerView动画组件使用动画(2)

    如果开发者要为RecylerView的子元素添加动画效果,需要使用RecyclerView类中的SetItemAnimator()方法,其语法形式如下:
    public virtual void SetItemAnimator(Android.Support.V7.Widget.RecyclerView.ItemAnimator animator)
    

    其中,animator参数指定一个动画,这个动画就是表1-1中列出的动画类型。

    【示例1-1】下面将在RecylerView的子元素进行添加以及删除时,实现子元素动画。具体的操作步骤如下:
    (1)创建一个名为RecylerViewAnimatorsItemAnimator的项目。
    (2)将RecyclerViewAnimators.dll、Square.OkHttp.dll、Square.OkIO.dll、Square.Picasso.dll、Xamarin.Android.Arch.Core.Common.dll、Xamarin.Android.Arch.Lifecycle.Common.dll、Xamarin.Android.Arch.Lifecycle.Runtime.dll、Xamarin.Android.Support.Animated.Vector.Drawable.dll、Xamarin.Android.Support.Annotations.dll、Xamarin.Android.Support.Compat.dll、Xamarin.Android.Support.Core.UI.dll、Xamarin.Android.Support.Core.Utils.dll、Xamarin.Android.Support.Fragment.dll、Xamarin.Android.Support.Media.Compat.dll、Xamarin.Android.Support.v4.dll、Xamarin.Android.Support.v7.AppCompat.dll、Xamarin.Android.Support.v7.RecyclerView.dll和Xamarin.Android.Support.Vector.Drawable.dll库添加到RecylerViewAnimatorsItemAnimator项目的引用中。
    (3)添加图片image.jpg到RecylerViewAnimatorsItemAnimator项目的Resources下方的drawable文件夹中。
    (4)创建一个xml文件,命名为layout_list_item。
    (5)打开layout_list_item.cs文件,构建RecylerView的子元素。代码如下:
    <?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="wrap_content"
        android:padding="20dp"
        android:orientation="vertical">
        <ImageView
            android:id="@+id/image"
            android:layout_width="match_parent"
            android:layout_height="100dp"
            android:background="#11000000"
            android:scaleType="centerCrop"/>
        <TextView
            android:id="@+id/text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:textSize="18sp" />
    </LinearLayout>
    

    (6)创建一个适配器文件,命名为DataAdapter。

    (7)打开DataAdapter.cs文件,添加以下代码:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Android.App;
    using Android.Content;
    using Android.OS;
    using Android.Runtime;
    using Android.Views;
    using Android.Widget;
    using Square.Picasso;
    using Android.Support.V7.Widget;
    namespace RecylerViewAnimatorsItemAnimator
    {
        public class DataAdapter : RecyclerView.Adapter
        {
            Context context;
            List<string> dataset;
            //构造方法
            public DataAdapter(Context context, List<string> dataset)
            {
                this.context = context;
                this.dataset = dataset;
            }
            //子元素的个数
            public override int ItemCount
            {
                get
                {
                    return dataset.Count;
                }
            }
            //返回一个自定义的ViewHolder
            public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup parent, int viewType)
            {
                var v = LayoutInflater.From(context).Inflate(Resource.Layout.layout_list_item, parent, false);
                return new ViewHolder(v);
            }
    //填充onCreateViewHolder()方法返回的ViewHolder中的控件
            public override void OnBindViewHolder(RecyclerView.ViewHolder holder, int position)
            {
                var h = (ViewHolder)holder;
                Picasso.With(context).Load(Resource.Drawable.image).Into(h.Image);
                h.Text.Text = dataset[position];
            }
            //删除子元素
            public void Remove(int position)
            {
                dataset.RemoveAt(position);
                NotifyItemRemoved(position);
            }
            //添加子元素
            public void Add(string text, int position)
            {
                dataset.Insert(position, text);
                NotifyItemInserted(position);
            }
            private class ViewHolder : RecyclerView.ViewHolder
            {
                public ImageView Image { get; private set; }
                public TextView Text { get; private set; }
                public ViewHolder(View itemView)
                    : base(itemView)
                {
                    Image = itemView.FindViewById<ImageView>(Resource.Id.image);
                    Text = itemView.FindViewById<TextView>(Resource.Id.text);
                }
            }
        }
    }
    

    注意:开发者只有调用NotifyItemRemoved()、NotifyItemInserted()、NotifyItemChanged()和NotifyItemMoved()方法,才可以触发子元素动画。

  • 相关阅读:
    mongodb 安装为windos service
    30分钟搭建一个小型网站框架(python django)
    WAL学习
    postgres读写性能测试(本地、NFS)
    小麦带你看postgres(代码模块结构)
    使用zookeeper实现分布式master选举(c 接口版本)
    Alluxio1.0.1最新版(Tachyon为其前身)介绍,+HDFS分布式环境搭建
    CAF(C++ actor framework)(序列化之复杂类,分析 还有自己不懂的细思恐极函数实现)(三)
    CAF(C++ actor framework)(序列化之类,无需序列化,直接传)(二)
    CAF(C++ actor framework)(序列化之结构体,任意嵌套STL)(一)
  • 原文地址:https://www.cnblogs.com/daxueba-ITdaren/p/9044692.html
Copyright © 2020-2023  润新知