Android-动画

作者: sweetying | 来源:发表于2018-04-11 01:12 被阅读37次

前言

动画在我们的日常开发当中经常会使用到,例如,使用视图动画或则属性动画可以实现,加载的loading动画,item的进场动画,及activity和fragment切换时的动画等等

动画的分类

如下图


动画类型

逐帧动画

1.作用对象

视图控件(View)

  1. 如Android的TextView、Button等等
  2. 不可作用于View组件的属性,如:颜色、背景、长度等等

2.原理

按顺序播放一组预先定义好的图片,其实就是将动画拆分成一帧一帧的,每一帧是一张图片

3.具体使用

  • 步骤一: 在 res/anim的文件夹里创建动画效果.xml文件
  • 步骤2:设置动画资源(图片资源)
  • 步骤3:在Java代码中载入 & 启动动画

4.使用场景

较为复杂的动画效果(避免使用的图片较大,造成OOM异常)

补间动画

1.作用对象

视图控件(View)

  1. 如Android的TextView、Button等等
  2. 不可作用于View组件的属性,如:颜色、背景、长度等等

2.原理

通过确定开始的视图样式和结束的视图样式,中间的动画由系统补全来确定一个动画

  1. 结束的视图样式:平移、缩放、旋转 & 透明度样式
  2. 即补间动画的动画效果就是:平移、缩放、旋转 & 透明度动画

3.分类

如下图


示意图

3.具体使用

在xml布局中使用
  • 步骤一: 在 res/anim的文件夹里创建动画效果.xml文件
  • 步骤2:根据不同动画效果的语法设置不同动画参数,从而实现动画效果
  • 步骤3:在Java代码中创建Animation对象并播放动画
    示例代码:
public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button mButton = (Button) findViewById(R.id.Button);
    // 步骤1:创建 需要设置动画的 视图View
    Animation translateAnimation = AnimationUtils.loadAnimation(this, R.anim.view_animation);
    // 步骤2:创建 动画对象 并传入设置的动画效果xml文件
    mButton.startAnimation(translateAnimation);
    // 步骤3:播放动画
}
}
在代码中使用

Button mButton = (Button) findViewById(R.id.Button);
// 步骤1:创建 需要设置动画的 视图View

    Animation translateAnimation = new TranslateAnimation(0,500,0,500);
    // 步骤2:创建平移动画的对象:平移动画对应的Animation子类为TranslateAnimation
    // 参数分别是:
    // 1. fromXDelta :视图在水平方向x 移动的起始值
    // 2. toXDelta :视图在水平方向x 移动的结束值
    // 3. fromYDelta :视图在竖直方向y 移动的起始值
    // 4. toYDelta:视图在竖直方向y 移动的结束值

    translateAnimation.setDuration(3000);
    // 固定属性的设置都是在其属性前加“set”,如setDuration()
    mButton.startAnimation(translateAnimation);
    // 步骤3:播放动画

4.监听动画

  • Animation类通过监听动画开始 / 结束 / 重复时刻来进行一系列操作,如跳转页面等等

  • 通过在 Java 代码里setAnimationListener()方法设置

    Animation.addListener(new AnimatorListener() {
        @Override
        public void onAnimationStart(Animation animation) {
            //动画开始时执行
        }
    
         @Override
        public void onAnimationRepeat(Animation animation) {
            //动画重复时执行
        }
    
       @Override
        public void onAnimationCancel()(Animation animation) {
            //动画取消时执行
        }
    
        @Override
        public void onAnimationEnd(Animation animation) {
            //动画结束时执行
        }
    });
    
特别注意

若采取上述方法监听动画,每次监听都必须重写4个方法。

  • 背景:有些时候我们并不需要监听动画的所有时刻
  • 问题:但上述方式是必须需要重写4个时刻的方法,这显示太累赘
  • 解决方案:采用动画适配器AnimatorListenerAdapter,解决
  • 实现接口繁琐 的问题
anim.addListener(new AnimatorListenerAdapter() {  
// 向addListener()方法中传入适配器对象AnimatorListenerAdapter()
// 由于AnimatorListenerAdapter中已经实现好每个接口
// 所以这里不实现全部方法也不会报错
@Override  
public void onAnimationStart(Animator animation) {  
// 如想只想监听动画开始时刻,就只需要单独重写该方法就可以
}  
});

7. 应用场景

7.1 标准的动画效果
  • 补间动画常用于视图View的一些标准动画效果:平移、旋转、缩放 & 透明度;
  • 除了常规的动画使用,补间动画还有一些特殊的应用场景。
7.2 特殊的应用场景
  • Activity 的切换效果
  • Fragement 的切换效果
  • 视图组(ViewGroup)中子元素的出场效果
特点:补间动画并没有改变View的实际位置,只是视图上面的改变而已

属性动画

1.属性动画出现的原因

  1. 属性动画是Android3.0(API 11)后才提供的一种全新的动画模式
  2. 属性动画改变的对象实际位置, 视图动画没有改变实际位置
  3. 属性动画作用对象是所有Java对象,而视图动画作用对象是视图View

2.作用对象

  • 任意 Java 对象

不再局限于视图View

  • 实现的动画效果:可自定义各种动画效果

不再局限于4种基本变换:平移、旋转、缩放 & 透明度

3.特点

  • 作用对象进行了扩展:不只是View对象,甚至没对象也可以
  • 动画效果:不只是4种基本变换,还有其他动画效果
  • 作用领域:API11后引入的

工作原理

在一定时间内,通过对值的改变,并不断的将值赋给该对象的属性,从而实现该对象在该属性上的动画效果

4.具体使用

  • ValueAnimator 类是先改变值,然后 手动赋值 给对象的属性从而实现动画;是 间接 对对象属性进行操作;
  • ObjectAnimator 类是先改变值,然后 自动赋值 给对象的属性从而实现动画;是 直接 对对象属性进行操作;

5.插值器和估值器的区别

插值器可以控制属性动画的变化逻辑
估值器可以控制属性动画具体的值的变化

6.属性动画操作类

示意图

最后附上一篇学习Android动画的好文章,点击传送门

相关文章

  • Android-动画

    前言 动画在我们的日常开发当中经常会使用到,例如,使用视图动画或则属性动画可以实现,加载的loading动画,it...

  • Android-动画

    View Animation   视图动画也叫补间动画,可以在一个视图容器内执行一系列简单变换(位置、大小、旋转、...

  • android-动画

    配置动画资源 android支持3种类型的动画 属性动画 补间动画tweened animation.通过在目标...

  • Android-动画

    Android动画 可以分为3类,分别是: View Animation(视图动画也叫补间动画) Drawable...

  • Android-动画

    目录 一、概述 二、补间动画(Tween Animation) 三、帧动画(Frame Animation) 四、...

  • Android-动画-帧动画

    帧动画就像放幻灯片一样。创建的文件推荐存放在 res/drawable 目录下。 帧动画 语法 实例:循环播放几张...

  • Android-动画-属性动画

    属性动画只对Android 3.0(API 11)以上版本的Android系统才有效,对于低版本的可以使用开源动画...

  • Android-属性动画

    在Android3.0以前的动画框架Animation存在着局限性:只能改变显示的位置,但是不能真正的更改View...

  • Android-图形图像与动画之Animation实现图像的 渐

    把代码过程重要的一些代码做个记录,下面代码是关于Android-图形图像与动画之Animation实现图像的 渐变...

  • Android Studio 视图结构

    1、Tools->Android->Layout Inspector2、Tools->Android->Andro...

网友评论

    本文标题:Android-动画

    本文链接:https://www.haomeiwen.com/subject/amnchftx.html