Android基础之Android动画
1. Frame Animation(帧动画)
帧动画,名字很形象,视频的播放就是一帧帧动画组成的,所以这个动画形成的原理就是将一幅幅图片组成一些,然后调用系统提供的方法进行播放形成的动画效果。下面我们直接看效果: 1、在drawable文件目录下创建animation-list动画集合,添加item。
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="true">
<item
android:drawable="@mipmap/girl_1"
android:duration="200"/>
<item
android:drawable="@mipmap/girl_2"
android:duration="200"/>
<item
android:drawable="@mipmap/girl_3"
android:duration="200"/>
<item
android:drawable="@mipmap/girl_4"
android:duration="200"/>
<item
android:drawable="@mipmap/girl_5"
android:duration="200"/>
<item
android:drawable="@mipmap/girl_6"
android:duration="400"/>
<item
android:drawable="@mipmap/girl_7"
android:duration="400"/>
<item
android:drawable="@mipmap/girl_6"
android:duration="400"/>
<item
android:drawable="@mipmap/girl_7"
android:duration="400"/>
<item
android:drawable="@mipmap/girl_6"
android:duration="400"/>
<item
android:drawable="@mipmap/girl_7"
android:duration="400"/>
<item
android:drawable="@mipmap/girl_8"
android:duration="200"/>
<item
android:drawable="@mipmap/girl_9"
android:duration="200"/>
<item
android:drawable="@mipmap/girl_10"
android:duration="200"/>
<item
android:drawable="@mipmap/girl_11"
android:duration="200"/>
</animation-list>
2、我们在将此动画集合设置为ImageView的BackGround,通过如下代码进行动画执行。
iv_imageView.setBackgroundResource(R.drawable.frame_animation);
AnimationDrawable animation = (AnimationDrawable)iv_imageView.getBackground();
animation.start();
2. Tween Animation(补间动画)
补间动画有四种,分别是alpha-animation(透明度动画)、translation-animation(平移动画)、rotation-animation(旋转动画)、scale-animation(缩放动画)。下面我们分别讲解这四种动画.
2.1 公共方法
四种动画都具有:
- setDuration(long durationMillis) 设置动画执行的时间
- setFillAfter(boolean fillAfter) 设置为true时,动画停在执行完后的效果,默认是执行完动画回到刚开始的效果
- setRepeatCount(int repeatCount) 设置动画重复次数,repeatCount默认为0,即执行一次,为1时,重复一次,即执行2次动画,
- setRepeatMode(int repeatMode) 设置动画重复的模式,有Animation.RESTART和Animation.REVERSE两种方式,默认为Animation.RESTART,Animation.RESTART是从头开始执行一次,设置Animation.REVERSE时候,是动画逆向执行,比如供执行两次。A->B,第二次就是B->A.
2.2 translation-animation(平移动画)
独特属性
- fromXDelta:X点的起始位置
- toXDelta :X的终止位置
- fromYDelta:Y的起始位置
- toYDelta:Y的终止位置 使用方式如下:
<translate
android:duration="5000"
android:fromXDelta="-500"
android:fromYDelta="200"
android:repeatCount="3"
android:repeatMode="reverse"
android:toXDelta="200"
android:toYDelta="200">
</translate>
在代码中进行调用:
private void playTranslation(){
Animation translationAnimation = AnimationUtils.loadAnimation(getApplication(), R.anim.translate_anim);
iv_imageView.startAnimation(translationAnimation);
}
2.3 alpha-animation(渐变动画)
- fromAlpha:起始透明度
- toAlpha:终止透明度
- 其中1表示完全不透明,0表示完全透明的 使用
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000"
android:fromAlpha="1"
android:toAlpha="0"
android:repeatCount="2"
android:repeatMode="restart">
</alpha>
2.4 rotation-animation(旋转动画)
特有的属性:
- fromDegrees:起始角度
- toDegrees:终止角度 使用方式如下:
<rotate
xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="0"
android:toDegrees="360"
android:repeatCount="1"
android:repeatMode="reverse"
android:duration="2000"
/>
3. 属性动画
大家都知道在Android 3.0以后,系统增加了一种新的动画——属性动画。在之前,我们可以使用渐变动画操作很多内容,但是我们是否注意到渐变动画针对操作在View视图上,无法针对某一具体属性进行操作,故属性动画出来了。属性动画的实现机制是通过对目标对象进行赋值并修改其属性来实现的。 学习属性动画我们需要学习一下几个类:
3.1 ValueAnimator
该类是属性动画的核心类,它通过计算动画的变化量并把他们赋值给相应的Object。在使用过程中,我们只需要把初始值和终止值告诉ValueAnimator就可以了。接下来看看ValueAnimator的常用方法:
使用步骤:
- 获取ValueAnimator对象:通过它的of..方法进行获取。
- 设置动画的属性。
- 启动动画。
ValueAnimator valueAnim = ValueAnimator.ofFloat(0.0f,1.0f); valueAnim.setDuration(1000); valueAnim.start();
我们启动后发现,在1s内实现参数的均匀变化。但是我们并无法观察到实际的现象,只是知道属性在变化,那么我们如何作用在view控件上呢?我们可以看看ObjectAnimator的使用。
3.2 ObjectAnimator
ObjectAnimator是我们在属性动画中经常使用的类,它继承自ValueAnimator,它针对具体view的某一属性进行改变。
使用步骤:
- 获取ObjectAnimator对象
- 设置动画的属性。
- 启动动画。
实例1:使用ObjectAnimator实现平移动画
ObjectAnimator objectAnimtor = ObjectAnimator.ofFloat(myView, "translationX", 0.0f,200f);
objectAnimtor.setDuration(5000);
objectAnimtor.start();
转载自:https://juejin.cn/post/6999766871859806238