一、Android动画学习---视图动画

目录

七、视图动画

●两种类型的动画:View Animstion(视图动画)和Property Animation(属性动画)。

●Tween Animation(补间动画)

一、 概述

1.XML配置文件中

二、 scale标签——调节尺寸

三、 alpha标签——调节透明度

四、 rotate标签——旋转

五、 translate标签 —— 平移

六、 set标签——定义动作合集

七、 Interpolator插值器

八、 代码生成alpha、scale、translate、rotate、set及插值器动画

1.概述

2.Animation公共类

●函数

●ScaleAnimation

●AlphaAnimation

●RotateAnimation

●TranslateAnimation

●AnimationSet

●Frame Animation(逐帧动画)

八、Property Animation(属性动画)ValueAnimator基本使用

一、概述

1、为什么引入Property Animator(属性动画)

二、ValueAnimator简单使用


本文章作为学习总结

尊重原创老师自定义控件三部曲之动画篇(四)——ValueAnimator基本使用_启舰的博客-CSDN博客

七、视图动画

●两种类型的动画:View Animstion(视图动画)和Property Animation(属性动画)。

其中View Animstion(视图动画)包括Tween Animation(补间动画)和Frame Animation(逐帧动画);

Property Animation(属性动画)包括ValueAnimator和ObjectAnimator。

首先,直观上,他们有如下三点不同:

1、引入时间不同:View Animation是API Level 1就引入的。Property Animation是API Level 11引入的,即Android 3.0才开始有Property Animation相关的API。

2、所在包名不同:View Animation在包android.view.animation中。而Property Animation API在包 android.animation中。

3、动画类的命名不同:View Animation中动画类取名都叫XXXXAnimation,而在Property Animator中动画类的取名则叫XXXXAnimator

4、大家都知道逐帧动画主要是用来实现动画的,而补间动画才能实现控件的渐入渐出、移动、旋转和缩放的;

●Tween Animation(补间动画)

一、 概述

Android的animation由四种类型组成:alpha、scale、translate、rotate,对应android官方文档地址:《Animation Resources》

1.XML配置文件中

alpha 渐变透明度动画效果

scale 渐变尺寸伸缩动画效果

translate 画面转换位置移动动画效果

rotate 画面转移旋转动画效果

二、 scale标签——调节尺寸

1.自有属性

<scale xmlns:android="http://schemas.android.com/apk/res/android"

<!--    宽度、高度都从0缩放到1.4倍大小-->

    android:fromXScale="0.0"

    android:toXScale="1.4"

    android:fromYScale="0.0"

    android:toYScale="1.4"

    android:duration="700"

>

</scale>

2.pivotX和pivotY三种取值:

android:pivotX和pivotY:指定动画起始点坐标;

取值为数值时:50

在坐标原点的基础上X轴正方向和Y轴正方向都加上50px;

取值为百分数时:50%

表示在原点坐标的基础上加上自己的宽度的50%;

取值为百分数p时:50%p

表示数值的基数是父控件,即在原点的基础上增加的值是父控件的百分值;

android:fromXScale    起始的X方向上相对自身的缩放比例,浮点值,比如1.0代表自身无变化,0.5代表起始时缩小一倍,2.0代表放大一倍;

android:toXScale        结尾的X方向上相对自身的缩放比例,浮点值;

android:fromYScale    起始的Y方向上相对自身的缩放比例,浮点值,

android:toYScale        结尾的Y方向上相对自身的缩放比例,浮点值;

android:pivotX            缩放起点X轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p,当为数值时,表示在当前View的左上角,即原点处加上50px,做为起始缩放点;如果是50%,表示在当前控件的左上角加上自己宽度的50%做为起始点;如果是50%p,那么就是表示在当前的左上角加上父控件宽度的50%做为起始点x轴坐标。(具体意义,后面会举例演示)

android:pivotY           缩放起点Y轴坐标,取值及意义跟android:pivotX一样。

3.从Animation类继承的属性

Animation类是所有动画(scale、alpha、translate、rotate)的基类,这里以scale标签为例,讲解一下,Animation类所具有的属性及意义。关于Animation类的官方文档位置为:《Animation》

android:duration        动画持续时间,以毫秒为单位

android:fillAfter          如果设置为true,控件动画结束时,将保持动画最后时的状态

android:fillBefore       如果设置为true,控件动画结束时,还原到开始动画前的状态

android:fillEnabled    与android:fillBefore 效果相同,都是在动画结束时,将控件还原到初始化状态

android:repeatCount 重复次数

android:repeatMode 重复类型,有reverse和restart两个值,reverse表示倒序回放,restart表示重新放一遍,必须与repeatCount一起使用才能看到效果。因为这里的意义是重复的类型,即回放时的动作。

android:interpolator  设定插值器,其实就是指定的动作效果,比如弹跳效果等。

三、 alpha标签——调节透明度

1、自身属性

android:fromAlpha   动画开始的透明度,从0.0 --1.0 ,0.0表示全透明,1.0表示完全不透明

android:toAlpha       动画结束时的透明度,也是从0.0 --1.0 ,0.0表示全透明,1.0表示完全不透明

四、 rotate标签——旋转

1、自身属性

android:fromDegrees     开始旋转的角度位置,正值代表顺时针方向度数,负值代码逆时针方向度数

android:toDegrees        结束时旋转到的角度位置,正值代表顺时针方向度数,负值代码逆时针方向度数

android:pivotX           缩放起点X轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p,具体意义已在scale标签中讲述,这里就不再重讲

android:pivotY            缩放起点Y轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p

五、 translate标签 —— 平移

1、自身属性

android:fromXDelta    起始点X轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p,具体意义已在scale标签中讲述,这里就不再重讲

android:fromYDelta    起始点Y轴从标,可以是数值、百分数、百分数p 三种样式;

android:toXDelta       结束点X轴坐标

android:toYDelta       结束点Y轴坐标

六、 set标签——定义动作合集

七、 Interpolator插值器

1.概述

AccelerateDecelerateInterpolator   在动画开始与介绍的地方速率改变比较慢,在中间的时候加速

AccelerateInterpolator             在动画开始的地方速率改变比较慢,然后开始加速

AnticipateInterpolator             开始的时候向后然后向前甩

AnticipateOvershootInterpolator    开始的时候向后然后向前甩一定值后返回最后的值

BounceInterpolator                动画结束的时候弹起

CycleInterpolator                  动画循环播放特定的次数,速率改变沿着正弦曲线

DecelerateInterpolator             在动画开始的地方快然后慢

LinearInterpolator                 以常量速率改变

OvershootInterpolator             向前甩一定值后再回到原来位置

代码引用插值器方式:

  1. xml文件中直接引用
  2. 通过setInterpolator()函数设置

alphaAnim.setInterpolator(new LinearInterpolator());

八、 代码生成alpha、scale、translate、rotate、set及插值器动画

1.概述

scale —— ScaleAnimation

alpha —— AlphaAnimation

rotate —— RotateAnimation

translate —— TranslateAnimation

set —— AnimationSet

2.Animation公共类

●函数

void cancle()     取消动画

void reset()      将控件重置到动画开始前状态

void setAnimationListener(Animation.AnimationListener listener)   设置监听动画,其中Animation.AnimationListener listener中的回调函数如下:

abstract void onAnimationEnd(Animation animation)    动画结束时调用

abstract void onAnimationRepeat(Animation animation)    动画重复时调用

abstract void onAnimationStart(Animation animation)    开始

android:duration              setDuration(long)  动画持续时间,以毫秒为单位

android:fillAfter               setFillAfter(boolean) 如果设置为true,控件动画结束时,将保持动画最后时的状态

android:fillBefore              setFillBefore(boolean) 如果设置为true,控件动画结束时,还原到开始动画前的状态

android:fillEnabled             setFillEnabled(boolean) 与android:fillBefore 效果相同,都是在动画结束时,将控件还原到初始化状态

android:repeatCount           setRepeatCount(int) 重复次数

android:repeatMode           setRepeatMode(int) 重复类型,有reverse和restart两个值,取值为RESTART或 REVERSE,必须与repeatCount一起使用才能看到效果。因为这里的意义是重复的类型,即回放时的动作。

android:interpolator           setInterpolator(Interpolator) 设定插值器,其实就是指定的动作效果,比如弹跳效果等

●ScaleAnimation

放到代码中,ScaleAnimation有下面几个构造函数:

ScaleAnimation(Context context, AttributeSet attrs)  从XML文件加载动画,基本用不到

ScaleAnimation(float fromX, float toX, float fromY, float toY)

ScaleAnimation(float fromX, float toX, float fromY, float toY, float pivotX, float pivotY)

ScaleAnimation(float fromX, float toX, float fromY, float toY, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)

第一个构造函数是从本地XML文件加载动画,基本用不到的,我们主要看下面三个构造函数。

在标签属性android:pivotX中有三种取值,数,百分数,百分数p;体现在构造函数中,就是最后一个构造函数的pivotXType,它的取值有三个,Animation.ABSOLUTE、Animation.RELATIVE_TO_SELF和Animation.RELATIVE_TO_PARENT;

示例:

scaleAnim = new ScaleAnimation(0.0f,1.4f,0.0f,1.4f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);

scaleAnim.setDuration(700);

AlphaAnimation

AlphaAnimation(Context context, AttributeSet attrs)  同样,从本地XML加载动画,基本不用

AlphaAnimation(float fromAlpha, float toAlpha)

示例:

alphaAnim = new AlphaAnimation(1.0f,0.1f);

alphaAnim.setDuration(3000);

alphaAnim.setFillBefore(true);

●RotateAnimation

RotateAnimation(Context context, AttributeSet attrs)  从本地XML文档加载动画,同样,基本不用

RotateAnimation(float fromDegrees, float toDegrees)

RotateAnimation(float fromDegrees, float toDegrees, float pivotX, float pivotY)

RotateAnimation(float fromDegrees, float toDegrees, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)

RotateAnimation跟ScaleAnimation差不多,关键问题同样是pivotXType和pivotYType的选择,同样有三个取值:Animation.ABSOLUTE、Animation.RELATIVE_TO_SELF和Animation.RELATIVE_TO_PARENT;

示例:

rotateAnim = new RotateAnimation(0, -650, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);

rotateAnim.setDuration(3000);

rotateAnim.setFillAfter(true);

●TranslateAnimation

TranslateAnimation(Context context, AttributeSet attrs)  同样,基本不用

TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta)

TranslateAnimation(int fromXType, float fromXValue, int toXType, float toXValue, int fromYType, float fromYValue, int toYType, float toYValue)

由于fromXDelta、fromYDelta、toXDelta、toYDelta这三个属性都具有三种状态,所以在构造函数中,最理想的状态就是第三个构造函数,能够指定每个值的类型,第二个构造函数:TranslateAnimation (float fromXDelta, float toXDelta, float fromYDelta, float toYDelta)使用是绝对数值。只有最后一个构造函数可以指定百分数和相对父控件的百分数。

示例:

<?xml version="1.0" encoding="utf-8"?>

<translate xmlns:android="http://schemas.android.com/apk/res/android"

    android:fromXDelta="0"

    android:toXDelta="-80"

    android:fromYDelta="0"

    android:toYDelta="-80"

    android:duration="2000"

    android:fillBefore="true">

</translate>

translateAnim = new TranslateAnimation(Animation.ABSOLUTE, 0, Animation.ABSOLUTE, -80,

Animation.ABSOLUTE, 0, Animation.ABSOLUTE, -80);

translateAnim.setDuration(2000);

translateAnim.setFillBefore(true);

●AnimationSet

它自己是没有XML属性的,所以我们直接说它的构造函数:

AnimationSet(Context context, AttributeSet attrs)  同样,基本不用

AnimationSet(boolean shareInterpolator)  shareInterpolator取值true或false,取true时,指在AnimationSet中定义一个插值器(interpolater),它下面的所有动画共同。如果设为false,则表示它下面的动画自己定义各自的插值器。

增加动画的函数为:

public void addAnimation (Animation a)

示例:

alphaAnim = new AlphaAnimation(1.0f,0.1f);

scaleAnim = new ScaleAnimation(0.0f,1.4f,0.0f,1.4f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);

rotateAnim = new RotateAnimation(0, 720, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);

setAnim=new AnimationSet(true);

setAnim.addAnimation(alphaAnim);

setAnim.addAnimation(scaleAnim);

setAnim.addAnimation(rotateAnim);

setAnim.setDuration(3000);

setAnim.setFillAfter(true);

●Frame Animation(逐帧动画)

  •  xml实现逐帧动画

.........

八、Property Animation(属性动画)ValueAnimator基本使用

.........

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值