android动画

动画分为两类,传统动画、属性动画

传统动画

传统动画又分为帧动画、补间动画

帧动画

是通过在特定帧显示不同图片,使连贯起来在视觉上看起来像动画。
有点类似与gif

将图片资源放入到drawable文件夹
在drawable下新建资源文件 drawable1.xml 类型:animation-list

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:drawable="@drawable/image1"
android:duration="1000" />
<item
android:drawable="@drawable/image2"
android:duration="1000" />
<item
android:drawable="@drawable/image3"
android:duration="1000" />
<item
android:drawable="@drawable/image4"
android:duration="1000" />
</animation-list>

android:drawable 指的是要显示的图片资源
android:duration: 图片显示时长

还有一些其它参数

在Activity中调用

1
2
3
4
imageView = findViewById(R.id.imageView);
imageView.setImageResource(R.drawable.image);
AnimationDrawable drawable = (AnimationDrawable) imageView.getDrawable();
drawable.start();

这样就可以让四张图片动起来了。

这样就是一个帧动画的简单样例

补间动画

补间动画分为四种类形式: alpha(淡入淡出),translate(位移),scale(缩放大小),rotate(旋转)
其实就是四种动画效果,我们选择单独选择一种、也可以同时使用几种。

补间动画可以通过xml、或者代码形式实现。

xml实现补间动画

alpha

在res/anim下新建文件alpha_anime.xml

1
2
3
4
5
6
7
8
9
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:fromAlpha="0.0"
android:toAlpha="1.0"
android:duration="1000"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:repeatMode="restart"
android:repeatCount="infinite"
/>

在Activity中

1
2
3
Animation animation = AnimationUtils.loadAnimation(this.getApplicationContext(), R.anim.alpha_anime);
ImageView alphaImage = findViewById(R.id.alphaImageView);
alphaImage.startAnimation(animation);

这样就能实现图片渐隐的无限循环效果

scale

在res/anim下新建文件scale.xml

1
2
3
4
5
6
7
8
9
10
11
<scale xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000"
android:fromXScale="0.0"
android:fromYScale="0.0"
android:pivotX="50%"
android:pivotY="50%"
android:toXScale="1.0"
android:toYScale="1.0"
android:repeatMode="restart"
android:repeatCount="infinite"
/>

translate

1
2
3
4
5
6
7
8
9
<translate xmlns:android="http://schemas.android.com/apk/res/android"

android:interpolator="@android:anim/accelerate_interpolator"
android:fromYDelta="100%p"
android:toYDelta="0%p"
android:duration="1000"
android:fromXDelta="100%"
android:toXDelta="0%"
/>

rotate

1
2
3
4
5
6
7
8
9
10
11
<rotate xmlns:android="http://schemas.android.com/apk/res/android" >
<rotate
android:fromDegrees="0"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="359"
android:duration = "1000"
android:drawable = "@mipmap/image1"
android:visible = "true">
</rotate>
</rotate>

属性动画