Android-Animation (1) 视图动画

学习自:

Keegan小钢http://keeganlee.me/post/android/20151003

Carson_Hohttps://www.jianshu.com/p/733532041f46

Android 框架提供了两种动画体系:

视图动画(View Animation):

应用于各种View,可以做一些位置、大小、旋转和透明度的简单转变。改变的只是View的绘制效果。 xml 文件存放在 res/anim/目录下。

属性动画(Property Animation):

它是在 andorid3.0 引入的动画体系,提供了更多特性和灵活性,可以应用于任何对象。属性动画可以改变真正的属性。xml 文件存放在 res/animator/ 目录下。

1.alpha (透明度动画)

实现透明度渐变动画效果,淡入淡出效果。

属性 说明
duration 持续时间
fromAlpha 开始时透明度,0.0全透明,1.0不透明
toAlpha 结束时透明度,0.0全透明,1.0不透明
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000"
android:fromAlpha="0.0"
android:toAlpha="1.0" />

效果图:

添加动画到 View 中:

iv_.startAnimation(AnimationUtils.loadAnimation(this, R.anim.test_anim_alpha))

获取 AlphaAnimation 对象,对动画进行重用

var animAlpha = AnimationUtils.loadAnimation(this, R.anim.test_anim_alpha) as AlphaAnimation

2.scale (缩放动画)

实现缩放的动画效果

属性 描述
duration 持续时间
pivotX 缩放轴点X, 用百分比表示,0%表示左边缘,100%表示右边缘
pivotY 缩放轴点Y,用百分比表示,0%表示顶边缘,100%表示底边缘
fromXScale 开始时X坐标缩放尺寸
fromYScale 开始时Y坐标缩放尺寸
toXScale 结束时X坐标缩放尺寸
toYScale 结束时Y坐标缩放尺寸

上边几个缩放尺寸,0.0表示缩放到没有,1.0正常大小,大于1.0 表示放大

<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000"
android:pivotX="50%"
android:pivotY="50%"
android:fromXScale="0.5"
android:fromYScale="0.5"
android:toXScale="1.0"
android:toYScale="1.0"/>

效果图:

3. translate (平移动画)

实现位置移动的动画效果,可以是垂直方向或者水平方向的。

属性 说明
fromXDelta 起始位置X坐标的偏移量
toXDelta 结束位置X坐标的偏移量
fromYDelta 起始位置Y坐标的偏移量
toYDelta 结束位置Y坐标的偏移量

坐标值有三种格式:

以百分比 “%” 结束,表示相对于View 本身的百分比位置。

以 “%p” 结束,表示相对于View的父View的百分比位置。

没有后缀,相对于View本身具体的像素值。

从左到右移动:

代码:

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="2000"
android:fromXDelta="-100%"
android:fromYDelta="0"
android:toXDelta="100%"
android:toYDelta="0" />

效果图:

4.rotate (旋转动画)

实现旋转的动画效果

属性 说明
fromDegrees 旋转开始角度
toDegrees 旋转结束角度
pivoX 旋转中心点的X坐标
pivoY 旋转中心点的Y坐标

旋转180度:

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="3000"
android:fromDegrees="0"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="180" />

效果图:

5.set

set 标签可以将多个动画组合起来,变成一个动画集。

5.1 缩放的同时又移动

代码:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="3000">
<translate
android:fromXDelta="0"
android:fromYDelta="0"
android:toXDelta="100%"
android:toYDelta="0" />
<scale
android:fromXScale="1.0"
android:fromYScale="1.0"
android:pivotX="0%"
android:pivotY="100%"
android:toXScale="1.5"
android:toYScale="1.5" />
</set>

效果图:

5.2 缩放的同时又改变透明度

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" android:duration="3000">
<scale android:fromYScale="0%"
android:fromXScale="0%"
android:toXScale="100%"
android:toYScale="100%"
android:pivotY="50%"
android:pivotX="50%" />
<alpha
android:fromAlpha="0"
android:toAlpha="1"/>
</set>

效果图:

6. 通用属性

属性 说明
duration 动画从开始到结束持续的时长,单位为毫秒
fillAfter 动画执行完后,View是否会停留在动画的最后一帧;默认为false
fillBefore 动画执行完后,View是否回到动画执行前的状态;默认为true
repeatCount 动画重复执行的次数,默认0,即不重复;可设置为-1或infinite,表示无限重复
repeatMode 动画重复执行的模式:
restart :动画重复执行时从起点开始,默认值
reverse :动画会反方向执行
startOffset 设置动画执行之前的等待时长,单位为毫秒。
zAdjustment 表示被设置动画的内容在动画运行时在 Z 轴上的位置,取值:
normal:默认值,保持内容在 Z 轴上的位置不变
top :保持在 Z 轴最上层
bottom:保持在 Z轴最下层
interpolator 设置动画速率的变化。如加速、减速、匀速等。

7.interpolator 插值器

通过interpolator 可以定义动画速率变换的方式,比如加速、减速、匀速等。每种Interpolator的子类。

可以实现非线性运动效果。

系统提供的 9种Interpolator

Interpolator class Resource ID And Description
AccelerateDecelerateInterpolator @android:anim/accelerate_decelerate_interpolator
在动画开始与结束时速率改变比较慢,在中间的时候加速
AccelerateInterpolator @android:anim/accelerate_interpolator
在动画开始时速率改变比较慢,然后开始加速
AnticipateInterpolator @android:anim/anticipate_interpolator
动画开始的时候向后然后往前抛
AnticipateOvershootInterpolator @android:anim/anticipate_overshoot_interpolator
动画开始的时候向后然后向前抛,会抛超过目标值后再返回到最后的值
BounceInterpolator @android:anim/bounce_interpolator
动画结束的时候会弹跳
CycleInterpolator @android:anim/bounce_interpolator
动画循环做周期运动,速率改变沿着正弦曲线
DecelerateInterpolator @android:anim/decelerate_interpolator
在动画开始时速率改变比较快,然后开始减速
LinearInterpolator @android:anim/decelerate_interpolator
动画匀速播放
OvershootInterpolator @android:anim/overshoot_interpolator
动画向前抛,会抛超过最后值,然后再返回

设置 Interpolator 的两种方式:

(1) 直接在动画 XML 资源文件种指定资源ID

 android:interpolator="@android:anim/overshoot_interpolator"

(2) 代码设置

var animAlpha = AnimationUtils.loadAnimation(this, R.anim.test_anim_alpha) as AlphaAnimation //获取动画对象实例
var overshootInterpolator = OvershootInterpolator() //声明插值器
animAlpha.interpolator=overshootInterpolator //设置插值器
iv_temp3.startAnimation(animAlpha) //设置动画

系统内置插入器效果图:

代码:

tv_1.startAnimation(TranslateAnimation(0f, 500f, 0f, 0f).
apply { fillAfter = true; duration = 4000;interpolator = AccelerateDecelerateInterpolator() })
tv_2.startAnimation(TranslateAnimation(0f, 500f, 0f, 0f).
apply { fillAfter = true; duration = 4000;interpolator = AccelerateInterpolator() })
tv_3.startAnimation(TranslateAnimation(0f, 500f, 0f, 0f).
apply { fillAfter = true; duration = 4000;interpolator = AnticipateInterpolator() })
tv_4.startAnimation(TranslateAnimation(0f, 500f, 0f, 0f).
apply { fillAfter = true; duration = 4000;interpolator = AnticipateOvershootInterpolator() })
tv_5.startAnimation(TranslateAnimation(0f, 500f, 0f, 0f).
apply { fillAfter = true; duration = 4000;interpolator = BounceInterpolator() })
tv_6.startAnimation(TranslateAnimation(0f, 500f, 0f, 0f).
apply { fillAfter = true; duration = 4000;interpolator = CycleInterpolator(1f) })
tv_7.startAnimation(TranslateAnimation(0f, 500f, 0f, 0f).
apply { fillAfter = true; duration = 4000;interpolator = DecelerateInterpolator() })
tv_8.startAnimation(TranslateAnimation(0f, 500f, 0f, 0f).
apply { fillAfter = true; duration = 4000;interpolator = LinearInterpolator() })
tv_9.startAnimation(TranslateAnimation(0f, 500f, 0f, 0f).
apply { fillAfter = true; duration = 4000;interpolator = OvershootInterpolator() })

8.监听动画

//获取动画对象实例
var animAlpha = AnimationUtils.loadAnimation(this, R.anim.test_anim_alpha) as AlphaAnimation
animAlpha.setAnimationListener(object: Animation.AnimationListener{
override fun onAnimationRepeat(animation: Animation?) {
//动画重复
}
override fun onAnimationEnd(animation: Animation?) {
//动画结束
} override fun onAnimationStart(animation: Animation?) {
//动画开始
}
})

9. 应用场景

  • 常用于视图View的一些标准动画效果:平移、旋转、缩放、透明度
  • 其他应用场景:Activity 切换效果;Fragment 切换效果;视图组(ViewGroup)中子元素的出场效果。

Android-Animation (1) 视图动画的更多相关文章

  1. Android开发之视图动画基础

    Android的animation由四种类型组成 XML中  alpha 渐变透明度动画效果 scale 渐变尺寸伸缩动画效果 translate 画面转换位置移动动画效果 rotate 画面转移旋转 ...

  2. 浅谈Android样式开发之View Animation (视图动画)

    引言 一个用户体验良好的App肯定少不了动画效果.Android为我们提供了2种动画框架,分别是视图动画(View Animation)和属性动画(Property Animation).视图动画比较 ...

  3. Android基础夯实--重温动画(二)之Frame Animation

    心灵鸡汤:天下事有难易乎,为之,则难者亦易矣:不为,则易者亦难矣. 摘要 当你已经掌握了Tween Animation之后,再来看Frame Animation,你就会顿悟,喔,原来Frame Ani ...

  4. Android基础夯实--重温动画(一)之Tween Animation

    心灵鸡汤:真正成功的人生,不在于成就的大小,而在于你是否努力地去实现自我,喊出自己的声音,走出属于自己的道路. 摘要 不积跬步,无以至千里:不积小流,无以成江海.学习任何东西我们都离不开扎实的基础知识 ...

  5. Android Animation简述

    Android Animation简述 一.动画(Animation)          Android框架提供了两种动画系统:属性动画(Android3.0)和视图动画.同时使用两种动画是可行的,但 ...

  6. Android animation summary

    Android animation 动画定义 动画的意思就是一连串画面动起来了,根据这一连串画面的产生原理可分为两类:补间动画(Tween animation)和帧动画(frame animation ...

  7. Android 动画基础——视图动画(View Animation)

    本篇讲android 3.0之前被广泛的动画框架——ViewAnimation. 目录 我将分为六部分来讲: 概述 Alpha透明动画 Rotate旋转动画 Translate位移动画 Scale放缩 ...

  8. Android Animation(动画)

    前言 Android 平台提供实现动画的解决方案(三种) 一.3.0以前,android支持两种动画: (1)Frame Animation:顺序播放事先做好的图像,与gif图片原理类似,是一种逐帧动 ...

  9. Android动画学习笔记-Android Animation

    Android动画学习笔记-Android Animation   3.0以前,android支持两种动画模式,tween animation,frame animation,在android3.0中 ...

  10. Android动画主要包含补间动画(Tween)View Animation、帧动画(Frame)Drawable Animation、以及属性动画Property Animation

    程序运行效果图: Android动画主要包含补间动画(Tween)View Animation.帧动画(Frame)Drawable Animation.以及属性动画Property Animatio ...

随机推荐

  1. 对半导体制造(FAB)工种的全方位解析

    本文转载自微信公众号 - 感集网, 链接 https://mp.weixin.qq.com/s/MRoWRbKZFBrJcQAZPqDa7w

  2. react native头部标题样式修改

    navigationOptions: ({navigation}) => ({ headerTitle:'评估记录', headerBackTitle:null, headerLeft:null ...

  3. C# 获取电脑配置信息

    对于软件绑定电脑常用到的方法汇总 public class Computer { public string MyProperty { get; set; } /// <summary> ...

  4. webbrowser设置为相应的IE版本

    注册表路径: HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATU ...

  5. day 24-1 继承

    继承 什么是继承: 继承是一种创建新类的方式,在 python 中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类 父类必须在子类上面 一个类 可以被多个类继承 一个 ...

  6. LeetCode第二十三题-合并n个有序链表

    Merge k Sorted Lists 问题简介:合并k个已排序的链表并将其作为一个排序链表返回. 举例: 输入: [ 1->4->5, 1->3->4, 2->6 ] ...

  7. 嵌入式Linux学习路线

    最近比较忙,对于嵌入式的相关学习一直没有很好的开展.今天也看了不少的嵌入式Linux的学习路线,也和几个工作过的朋友聊了聊,想把之后的学习过程记录下来. 自己以后想从事驱动开发这方面的工作,因为大多数 ...

  8. go语言熟知的开源项目

    go语言在国内是比较火的,并且好多公司都用go语言进行重构之前的系统,今天来看下基本大家都知道的go语言的开源项目 1.Docker Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用 ...

  9. GitLab实战操作指南

    一.Git原理 1.Git是什么? Git是目前世界上最先进的分布式版本控制系统(没有之一). 2.Git有什么特点? 简单来说就是:高端大气上档次! 3.GIt与SVN区别 SVN管理: 属于集中式 ...

  10. Laravel-google-authenticator--Google验证码

    开发前的准备 安装Laravel 安装二维码生成器QrCode,没有安装也可以,接下来会安装 安装拓展 1.运行如下代码安装拓展包: composer require "earnp/lara ...