ITPub博客

首页 > 移动开发 > ANDROID > XamarinAndroid组件教程RecylerView动画组件使用动画(2)

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

原创 ANDROID 作者:大学霸 时间:2018-05-16 10:29:25 0 删除 编辑

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="http://schemas.android.com/apk/res/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博客 ” ,链接:https://blog.itpub.net/29597077/viewspace-2154548/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-04-09

  • 博文量
    1047
  • 访问量
    990370