我爱编程

Android-动画

2018-04-11  本文已影响37人  sweetying

前言

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

动画的分类

如下图


动画类型

逐帧动画

1.作用对象

视图控件(View)

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

2.原理

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

3.具体使用

4.使用场景

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

补间动画

1.作用对象

视图控件(View)

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

2.原理

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

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

3.分类

如下图


示意图

3.具体使用

在xml布局中使用
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.监听动画

特别注意

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

anim.addListener(new AnimatorListenerAdapter() {  
// 向addListener()方法中传入适配器对象AnimatorListenerAdapter()
// 由于AnimatorListenerAdapter中已经实现好每个接口
// 所以这里不实现全部方法也不会报错
@Override  
public void onAnimationStart(Animator animation) {  
// 如想只想监听动画开始时刻,就只需要单独重写该方法就可以
}  
});

7. 应用场景

7.1 标准的动画效果
7.2 特殊的应用场景
特点:补间动画并没有改变View的实际位置,只是视图上面的改变而已

属性动画

1.属性动画出现的原因

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

2.作用对象

不再局限于视图View

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

3.特点

工作原理

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

4.具体使用

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

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

6.属性动画操作类

示意图

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

上一篇 下一篇

猜你喜欢

热点阅读