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()方法,才可以触发子元素动画。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29597077/viewspace-2154548/
,如需转载,请注明出处,否则将追究法律责任。