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

大學霸發表於2018-05-16

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

如果開發者要為RecylerView的子元素新增動畫效果,需要使用RecyclerView類中的SetItemAnimator()方法,其語法形式如下:

點選(此處)摺疊或開啟

  1. 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的子元素。程式碼如下:

點選(此處)摺疊或開啟

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android=""
  3.     android:layout_width="match_parent"
  4.     android:layout_height="wrap_content"
  5.     android:padding="20dp"
  6.     android:orientation="vertical">
  7.     <ImageView
  8.         android:id="@+id/image"
  9.         android:layout_width="match_parent"
  10.         android:layout_height="100dp"
  11.         android:background="#11000000"
  12.         android:scaleType="centerCrop"/>
  13.     <TextView
  14.         android:id="@+id/text"
  15.         android:layout_width="wrap_content"
  16.         android:layout_height="wrap_content"
  17.         android:layout_gravity="center_horizontal"
  18.         android:textSize="18sp" />
  19. </LinearLayout>


(6)建立一個介面卡檔案,命名為DataAdapter。
(7)開啟DataAdapter.cs檔案,新增以下程式碼:

點選(此處)摺疊或開啟

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using Android.App;
  6. using Android.Content;
  7. using Android.OS;
  8. using Android.Runtime;
  9. using Android.Views;
  10. using Android.Widget;
  11. using Square.Picasso;
  12. using Android.Support.V7.Widget;
  13. namespace RecylerViewAnimatorsItemAnimator
  14. {
  15.     public class DataAdapter : RecyclerView.Adapter
  16.     {
  17.         Context context;
  18.         List<string> dataset;
  19.         //構造方法
  20.         public DataAdapter(Context context, List<string> dataset)
  21.         {
  22.             this.context = context;
  23.             this.dataset = dataset;
  24.         }
  25.         //子元素的個數
  26.         public override int ItemCount
  27.         {
  28.             get
  29.             {
  30.                 return dataset.Count;
  31.             }
  32.         }
  33.         //返回一個自定義的ViewHolder
  34.         public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup parent, int viewType)
  35.         {
  36.             var v = LayoutInflater.From(context).Inflate(Resource.Layout.layout_list_item, parent, false);
  37.             return new ViewHolder(v);
  38.         }
  39. //填充onCreateViewHolder()方法返回的ViewHolder中的控制元件
  40.         public override void OnBindViewHolder(RecyclerView.ViewHolder holder, int position)
  41.         {
  42.             var h = (ViewHolder)holder;
  43.             Picasso.With(context).Load(Resource.Drawable.image).Into(h.Image);
  44.             h.Text.Text = dataset[position];
  45.         }
  46.         //刪除子元素
  47.         public void Remove(int position)
  48.         {
  49.             dataset.RemoveAt(position);
  50.             NotifyItemRemoved(position);
  51.         }
  52.         //新增子元素
  53.         public void Add(string text, int position)
  54.         {
  55.             dataset.Insert(position, text);
  56.             NotifyItemInserted(position);
  57.         }
  58.         private class ViewHolder : RecyclerView.ViewHolder
  59.         {
  60.             public ImageView Image { get; private set; }
  61.             public TextView Text { get; private set; }
  62.             public ViewHolder(View itemView)
  63.                 : base(itemView)
  64.             {
  65.                 Image = itemView.FindViewById<ImageView>(Resource.Id.image);
  66.                 Text = itemView.FindViewById<TextView>(Resource.Id.text);
  67.             }
  68.         }
  69.     }
  70. }


注意:開發者只有呼叫NotifyItemRemoved()、NotifyItemInserted()、NotifyItemChanged()和NotifyItemMoved()方法,才可以觸發子元素動畫。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29597077/viewspace-2154548/,如需轉載,請註明出處,否則將追究法律責任。

相關文章