转载

[译]:Xamarin.Android应用基础——图形和动画

博客分类: 官方教程

返回索引目录

原文链接: Graphics and Animation

译文链接: Xamarin.Android应用基础——图形和动画

图形和动画

本文内容为关于Xamarin.Android中的图形和动画简介

Android中提供了一个非常丰富和多样化的框架来支持2D图形和动画。本文将介绍这些框架,并讨论如何在Xamarin.Android应用中创建及使用自定义图形和动画。

概览

辅助功能

2D图形

可绘制资源

可绘制资源使用示例

利用Canvas API

使用Canvas API绘图

动画

用户喜欢在应用中移动的东西。动画是改善一个应用用户体验及辅助突出它的一个好方法。最好的动画是 那些用户不会注意到的 —— 因为他们 会觉得很自然。Android提供了以下三个API来支持动画:

  • 视图动画-View Animation —— 这是最原始的API。这些动画会绑定到 特定的视图,并且可以对视图内容进行简单的转换。由于它比较简单,所以这个API依旧很有效,如透明度渐变动画、旋转等等。
  • 属性动画-Property Animation —— 属性动画是在Android 3.0中引入的。他们使得应用可以让几乎任何东西具有动画效果。属性动画可以用于改变任何对象的任何属性,包括那些在屏幕上不显示的对象。
  • 绘制动画-Drawable Animation —— 这是利用一个特殊的drawable资源来给布局添加一个非常简单的动画效果。

一般来说,属性动画是首选的系统,因为它更灵活,并且提供更多的功能。

视图动画

视图动画仅限于视图,且只能针对值执行动画(如起终点、大小、旋转和透明度)。这些类型动画通常叫做补间动画。视图动画 可以有两种方式来定义:代码编程方式 和XML文件声明方式。XML文件声明方式是视图动画的首选方式,因为它们更易于阅读与维护。

XML文件动画定义将存储在Xamarin.Android项目的 /Resources/anim 目录中。此文件中必须用以下几个元素中的一个作为根元素:

  • alpha —— 淡入淡出动画。
  • rotate —— 旋转动画。
  • scale —— 大小调整动画
  • translate —— 水平和/或垂直移动
  • set —— 一个或多个动画元素组合容器

默认情况下,XML文件中的所有动画都将同时应用。要使动画按照一定的顺序发送,则需要在 上面例举的几个元素中设置 android:startOffset 属性。

我们可以通过使用一个内插器(interpolator)来影响动画的变化速度。内插器可以用于加速动画、重复动画或者减速动画。Android框架中提供了几个内置的内插器,例如:—— 只例举部分

  • AccelerateInterpolator / DecelerateInterpolator —— 此类内插器用于动画的加速或减速
  • BounceInterpolator —— 变化在结束时反弹
  • LinearInterpolator —— 变化速度恒定

下面的XML内容展示了一个组合多个动画的动画文件的示例:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false">

    <scale android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:fromXScale="1.0"
        android:toXScale="1.4"
        android:fromYScale="1.0"
        android:toYScale="0.6"
        android:pivotX="50%"
        android:pivotY="50%"
        android:fillEnabled="true"
        android:fillAfter="false"
        android:duration="700" />

    <set android:interpolator="@android:anim/accelerate_interpolator">
        <scale android:fromXScale="1.4"
            android:toXScale="0.0"
            android:fromYScale="0.6"
            android:toYScale="0.0"
            android:pivotX="50%"
            android:pivotY="50%"
            android:fillEnabled="true"
            android:fillBefore="false"
            android:fillAfter="true"
            android:startOffset="700"
            android:duration="400" />

        <rotate android:fromDegrees="0"
                android:toDegrees="-45"
                android:toYScale="0.0"
                android:pivotX="50%"
                android:pivotY="50%"
                android:fillEnabled="true"
                android:fillBefore="false"
                android:fillAfter="true"
                android:startOffset="700"
                android:duration="400" />
    </set>
</set>

此动画将同时执行所有动画内容。其中第一个scale动画将水平拉伸图片并垂直压缩图片,然后图像将同时 逆时针旋转45度角并缩小、最后从屏幕中消失。

动画可以使用编程方式应用到视图(先为动画填充具体内容,然后将其应用到视图)。Android提供了一个辅助类Android.Views.Animations.AnimationUtils 来将填充动画资源,并返回一个Android.Views.Animations.Animation实例。此对象可以通过调用StartAnimation并传递Animation对象来应用到视图。以下代码段展示了一个示例:

Animation myAnimation = AnimationUtils.LoadAnimation(this,Resource.Animation.MyAnimation);
ImageView myImage = FindViewById<ImageView>(Resource.Id.imageView1);
myImage.StartAnimation(myAnimation);

现在我们已经基本了解了视图动画是如何工作的,下面看看属性动画内容。

属性动画

使用ValueAnimator

使用ObjectAnimator

可绘制资源动画

总结

译: 奇葩史

原文  http://www.shisujie.com/blog/Graphics-and-Animation
正文到此结束
Loading...