XamarinAndroid組件教程RecylerView動畫組件使用動畫(2)

XamarinAndroid組件教程RecylerView動畫組件使用動畫(2)android

若是開發者要爲RecylerView的子元素添加動畫效果,須要使用RecyclerView類中的SetItemAnimator()方法,其語法形式以下:ide

public virtual void SetItemAnimator(Android.Support.V7.Widget.RecyclerView.ItemAnimator animator)

其中,animator參數指定一個動畫,這個動畫就是表1-1中列出的動畫類型。動畫

【示例1-1】下面將在RecylerView的子元素進行添加以及刪除時,實現子元素動畫。具體的操做步驟以下:this

(1)建立一個名爲RecylerViewAnimatorsItemAnimator的項目。spa

(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項目的引用中。code

(3)添加圖片image.jpg到RecylerViewAnimatorsItemAnimator項目的Resources下方的drawable文件夾中。xml

(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。utf-8

(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()方法,才能夠觸發子元素動畫。

相關文章
相關標籤/搜索