关于android:Android入门教程-动画之帧动画

34次阅读

共计 4280 个字符,预计需要花费 11 分钟才能阅读完成。

Android 利用的动画

  • 帧动画
  • 补间动画
  • 属性动画

帧动画(Frame Animation)

用多张图片来组成动画。一帧帧的播放图片,利用人眼视觉残留原理,给咱们带来动画的感觉。它的原理的 GIF 图片、电影播放原理一样。

咱们能够应用 AnimationDrawable 来实现动画成果。

应用 AnimationDrawable

应用一系列不同的图片,而后像一卷胶卷一样按程序播放,这是一种传统的动画,也可称为帧动画。也能够比喻为像一卷胶卷一样按程序播放。播放起来,有点像在看 gif 图。

上面应用 AnimationDrawable 类来实现动画成果。为了开发不便,咱们能够在 xml 中指定动画各个帧的信息。

应用背景图片

这是第一个例子。咱们先筹备 4 张图片(图片请自备)放进 res/drawable/ 中。在这个目录里,再新建一个文件 ani_frame_1.xml

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/ani_frame_1"
    android:oneshot="false">
    <item
        android:drawable="@drawable/f_zan_1"
        android:duration="250" />
    <item
        android:drawable="@drawable/f_zan_4"
        android:duration="250" />
    <item
        android:drawable="@drawable/f_zan_3"
        android:duration="250" />
    <item
        android:drawable="@drawable/f_zan_2"
        android:duration="250" />
</animation-list>

能够看到根节点 <animation-list> 蕴含了 4 个 item。每个子节点都定义了一个帧。duration 是这一帧的时常(毫秒)。drawable 是指定可绘制资源。oneshot="false",示意让动画始终循环播放上来。这样动画资源就筹备好了。

在 layout 中筹备一个 ImageView,用它来显示动画

<ImageView
    android:id="@+id/iv1"
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:layout_marginTop="60dp" />

在 activity 中操作这个 ImageView。把动画资源设置为背景。

var mFrameIv: ImageView? = null
// override fun onCreate(savedInstanceState: Bundle?)
mFrameIv = findViewById(R.id.iv1)
mFrameIv!!.setBackgroundResource(R.drawable.ani_frame_1)

把 ImageView 的背景强转为 AnimationDrawable。播放动画,要用AnimationDrawable.start() 办法。

val ani: AnimationDrawable = mFrameIv!!.background as AnimationDrawable
ani.start()

当动画正在播放时,调用 start() 办法是不会影响以后播放的。

进行动画,AnimationDrawable.stop()

val ani: AnimationDrawable = mFrameIv!!.background as AnimationDrawable
ani.stop()

stop() 办法能够让动画进行在以后帧。再调用 start() 的话,会从头开始播放。

应用 src

后面咱们利用的是 ImageView 的背景资源。咱们也能够应用 src。筹备另一个动画资源 ani_frame_2

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/ani_frame_1"
    android:oneshot="true">
    <item
        android:drawable="@drawable/f_zan_1"
        android:duration="250" />
    <item
        android:drawable="@drawable/f_zan_4"
        android:duration="250" />
    <item
        android:drawable="@drawable/f_zan_3"
        android:duration="250" />
    <item
        android:drawable="@drawable/f_zan_2"
        android:duration="250" />
</animation-list>

android:oneshot="true",动画播放 1 次后就会自行进行并放弃在最初一帧。

! 留神,进行后并不是回到第一帧。

而后在 layout 中,把它设置为 ImageView 的 src

<ImageView
    android:id="@+id/iv1"
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:layout_marginTop="60dp"
    android:src="@drawable/ani_frame_2" />

在 activity 中就不是操作 ImageView 的 background 了,而是操作 drawable

// 启动
val ani: AnimationDrawable = frameIv.drawable as AnimationDrawable
ani.start()

// 进行
val ani: AnimationDrawable = frameIv.drawable as AnimationDrawable
ani.stop()

能够看到,2 个例子中都须要操作 AnimationDrawable。请务必留神,对 AnimationDrawable.start() 办法不能在 Activity 的 onCreate() 办法期间调用,因为 AnimationDrawable 尚未齐全附加到窗口。如果想立刻播放动画而无需互动,那么可能须要从 Activity 中的 onStart() 办法进行调用,该办法会在 Android 在屏幕上出现视图时调用。

AnimationDrawable 类有几个属性能够留神一下

属性 阐明
isOneShot 是否只播放 1 次,与 xml 中的 android:oneshot 对应
isRunning 以后动画是否正在播放
numberOfFrames 帧的数量

Android 动画相干面试题

1,插值器的品种有哪些?怎么自定义插值器?

插值器决定值的变动模式,默认的品种有九个。

默认品种有:

  • AccelerateDecelerateInterpolator:在动画开始与完结的中央速率扭转比较慢,在两头的时候减速
  • AccelerateInterpolator:在动画开始的中央速率扭转比较慢,而后开始速率变动放慢
  • LinearInterpolator:以常量速率扭转
  • AnticipateInterpolator:开始的时候向后而后向前甩
  • CycleInterpolator:动画循环播放特定的次数,速率扭转沿着正弦曲线
  • PathInterpolator:动画执行的成果按贝塞尔曲线
  • anticipateOvershootInterpolator:开始的时候向后而后向前甩肯定值后返回最初的值
  • OvershootInterpolator:向前甩肯定值后再回到原来地位
  • BounceInterpolator:动画完结的时候有弹起成果

自定义插值器:

  • 写一个类实现 Interpolator 接口,Interpolator 是一个空的接口继承了 TimeInterpolator 接口,定义 getInterpolation 办法即可

2,属性动画呈现的版本和起因(或者对于属性动画的其余问题)?

呈现的版本:Android 3.0(API 11)后才提供的一种全新动画模式,呈现起因为作用对象局限于 View,没有扭转 View 的属性,只是扭转视觉效果,动画成果繁多。

二类三方:

  • 二类:ValueAnimator、ObjectAnimator 是其重要的两个类。
  • 三方:ValueAnimator 有 ofInt、ofFloat、ofObject 三个重要的办法

三个办法的作用:

  1. 创立动画实例
  2. 将传入的多个参数进行平滑过渡: 此处传入 0 和 1,示意将值从 0 平滑过渡到 1,如果传入了 3 个 Int 参数 a,b,c , 则是先从 a 平滑过渡到 b,再从 b 平滑过渡到 c,以此类推, 他们内置了估值器

插值器和估值器:

  • 插值器(Interpolator):决定值的变动模式
  • 估值器(TypeEvaluator):决定值的具体变动数值

3,动画能组合在一起应用么?

能够将动画组合在一起应用 AnimatorSet,AnimatorSet.play() 播放以后动画的同时能够

  • .with():将现有动画和传入的动画同时执行
  • .after():将现有动画插入到传入的动画之后执行
  • .before():将现有动画插入到传入的动画之前执行

4,ObjectAnimator 须要操作的 view 的属性(Property)有

  • Alpha 管制 View 的透明度
  • float TranslationX 管制 X 方向的位移
  • float TranslationY 管制 Y 方向的位移
  • float ScaleX 管制 X 方向的缩放倍数
  • float ScaleY 管制 Y 方向的缩放倍数
  • float Rotation 管制以屏幕方向为轴的旋转度数
  • float RotationX 管制以 X 轴为轴的旋转度数
  • float RotationY 管制以 Y 轴为轴的旋转度数

5,补间动画都有哪些(Tween 动画有哪些 | 怎么旋转、平移、缩放、透明度)?

补间动画由 Animation 类来实现具体成果,包含

  • 平移(TranslateAnimation)、
  • 缩放(ScaleAnimation)、
  • 旋转(RotateAnimation)、
  • 透明度(AlphaAnimation)

四个子类,四种变动。

Android 零根底入门教程视频参考

正文完
 0