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()方法,才可以触发子元素动画。

原文地址:https://www.cnblogs.com/daxueba-ITdaren/p/9044692.html

时间: 2024-09-29 09:26:32

XamarinAndroid组件教程RecylerView动画组件使用动画(2)的相关文章

XamarinAndroid组件教程RecylerView适配器动画动画种类

XamarinAndroid组件教程RecylerView适配器动画动画种类 本节将讲解RecylerView适配器动画,其中包含动画种类和如何使用动画. 动画种类 RecylerViewAnimators组件中RecylerView适配器动画种类包含在RecyclerViewAnimators.Adapters命名空间中.该命名空间包含6个类.这6个类可以划分为3种动画,如表1-2所示. 表1-2  RecyclerViewAnimators.Adapters命名空间中的类 类名 功能 Ani

vue的动画组件(transition)

当插入或删除包含在 transition 组件中的元素时,Vue 将会做以下处理: 自动嗅探目标元素是否应用了 CSS 过渡或动画,如果是,在恰当的时机添加/删除 CSS 类名. v-enter: 定义进入过渡的开始状态.在元素被插入时生效,在下一个帧移除.v-enter-active: 定义过渡的状态.在元素整个过渡过程中作用,在元素被插入时生效,在 transition/animation 完成之后移除. 这个类可以被用来定义过渡的过程时间,延迟和曲线函数.v-enter-to: 2.1.8

视图属性+对象动画组件ViewPropertyObjectAnimator

视图属性+对象动画组件ViewPropertyObjectAnimator ViewPropertyObjectAnmator组件是一款对象动画(ObjectAnimator)封装组件.它将视图属性动画(ViewPropertyAnimator)的易用性和对象动画(ObejctAnimator)的强大功能结合在一起.同时,该组件还支持额外的动画属性,如视图的尺寸.外边距.内边距.滚动等. 原文地址:https://www.cnblogs.com/daxueba-ITdaren/p/9076796

unity过场动画组件Timeline

Timeline是Unity2017版本中新加入的功能,可以非常方便的进行场景动画的创建和修改,包括物体.声音.粒子.动画.特效.自定义Playable以及子Timeline等多种资源进行整合,从而能够较方便的生成效果很棒的场景动画,同时可以通过Unity的Recorder资源包录制较为完整的视频并导出. 1.Timeline界面简单介绍 在Unity2017中,点击Window->Timeline即可调出Timeline面板.如下图所示: 在该面板中,可以创建多种类型的片段,如果你导入Asse

Vue.js 系列教程 2:组件,Props,Slots

原文:intro-to-vue-2-components-props-slots 译者:nzbin 这是关于 JavaScript 框架 Vue.js 五个教程的第二部分.在这一部分,我们将学习组件,Props 以及 Slots.这个系列教程并不是一个完整的用户手册,而是通过基础知识让你快速了解 Vuejs 以及它的用途. 系列文章: 渲染, 指令, 事件 组件, Props, Slots (你在这!) Vue-cli Vuex 动画 组件和传递数据 如果你熟悉 React 或者 Angular

ASP.NET使用log4Net日志组件教程(按日期与按日志大小切割)

对于一个大型网站与系统来说,日志是必备的工具,通过日志你可以非常清楚程序的运行情况,及时得到反馈来解决问题,下面介绍ASP.NET版本的log4Net日志组件是个非常强大的工具,最新版本for .net2.0 1.2.10.0 本人搞了一天,终于知道搞清楚怎样使用了,简单记录一下. 以下介绍的方法是log4net使用单独的配置文件的. 开始行动: 第一步:在项目引用log4net.dll文件 第二步: 在Web.config文件中加入一句代码,位置如下: <configuration>   

vue教程3-05 vue组件数据传递、父子组件数据获取

vue教程3-05 vue组件数据传递 一.vue默认情况下,子组件也没法访问父组件数据 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <script src="bower_components/vue/dist/vue.js"><

Android基础入门教程——8.4.1 Android动画合集之帧动画

Android基础入门教程--8.4.1 Android动画合集之帧动画 标签(空格分隔): Android基础入门教程 本节引言: 从本节开始我们来探究Android中的动画,毕竟在APP中添加上一些动画,会让我们的应用变得 很炫,比如最简单的关开Activity,当然自定义控件动画肯定必不可少啦~而Android中的动画 分为三大类,逐帧动画(Frame)以及补间动画(Tween),还有Android 3.0以后引入的属性动画 (Property),而本节给大家带来的是第一种动画--逐帧动画

.NET开发邮件发送功能的全面教程(含邮件组件源码)

ref: http://www.cnblogs.com/heyuquan/p/net-batch-mail-send-async.html 今天,给大家分享的是如何在.NET平台中开发"邮件发送"功能.在网上搜的到的各种资料一般都介绍的比较简单,那今天我想比较细的整理介绍下: 1)         邮件基础理论知识 2)         邮件发送相关.NET类库 3)         介绍我开发的一个发送邮件的小组件(MailHelper) 4)         MailHelper组