Android中的动画大致可以分为以下几类:
1. View动画(Tween Animation):View动画是针对View对象进行动画操作的一种动画类型,可以让View对象在一定时间内,由一个状态渐变到另一个状态。该动画主要通过移动、缩放、旋转、透明度等来控制View的动画效果。View动画采用补间动画(Tween Animation)实现,因此又叫做补间动画。
2. 帧动画(Frame Animation):帧动画是指通过一系列预先定义好的图像帧来实现动画效果。将所有的帧图像存放在同一个文件中,在动画播放时,逐帧播放其中的每一帧,并将其绘制到屏幕上。 帧动画特点是易于实现,适用于简单的动画效果,但是会占用大量的空间。
3. 属性动画(Property Animation):属性动画是基于Java语言的反射机制,通过改变对象的属性值来实现动画效果。通过对对象的属性进行变化,可以实现更加丰富多彩的动效,例如:渐变、旋转、缩放、平移等。属性动画可以通过代码和XML来定义动画,同时也支持动画组合以及定义插值器等功能。
4. 转场动画(Transitions Animation):转场动画是指在两个Activity或者两个Fragment之间,通过动画的效果来实现平滑的过渡。转场动画可以通过设置共享元素、设置场景动画等方式来实现。转场动画具有较好的用户体验和视觉效果。
不同的动画类型具有不同的特点和使用场景。View动画适用于简单的动画效果,帧动画适用于简单的动画效果且资源量小,属性动画在实现动画效果上更加丰富,而转场动画适用于Activity或者Fragment之间的平滑过渡。开发者应选择合适的动画类型来实现所需的动画效果。
以下是各种动画的简单实例代码:
1. View动画(Tween Animation)的实例代码:
通过代码实现:
```java
Animation animation = AnimationUtils.loadAnimation(context, R.anim.animation);
view.startAnimation(animation);
```
通过XML实现:
在res/anim文件夹中,新建animation.xml文件,定义以下内容:
```xml
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="3000"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
>
<alpha
android:duration="2000"
android:fromAlpha="0.0"
android:toAlpha="1.0"
/>
<translate
android:duration="2000"
android:fromXDelta="-50%"
android:toXDelta="0%"
/>
</set>
```
在代码中加载该动画:
```java
Animation animation = AnimationUtils.loadAnimation(context, R.anim.animation);
view.startAnimation(animation);
```
2. 帧动画(Frame Animation)的实例代码:
通过代码实现:
```java
ImageView imageView = findViewById(R.id.iv_frame_animation);
imageView.setBackgroundResource(R.drawable.frame_animation);
AnimationDrawable drawable = (AnimationDrawable) imageView.getBackground();
drawable.start();
```
通过XML实现:
在res/drawable文件夹中,新建frame_animation.xml文件,定义以下内容:
```xml
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="true">
<item android:drawable="@drawable/frame1" android:duration="200" />
<item android:drawable="@drawable/frame2" android:duration="200" />
<item android:drawable="@drawable/frame3" android:duration="200" />
<item android:drawable="@drawable/frame4" android:duration="200" />
</animation-list>
```
在ImageView中加载该动画:
```xml
<ImageView
android:id="@+id/iv_frame_animation"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/frame_animation" />
```
3. 属性动画(Property Animation)的实例代码:
通过代码实现:
```java
ObjectAnimator.ofFloat(view, "alpha", 0f, 1f).setDuration(2000).start();
ObjectAnimator.ofFloat(view, "translationX", -view.getWidth(), 0).setDuration(2000).start();
```
通过XML实现:
在res/anim文件夹中,新建animation.xml文件,定义以下内容:
```xml
<objectAnimator
android:propertyName="alpha"
android:duration="2000"
android:valueFrom="0.0"
android:valueTo="1.0" />
<objectAnimator
android:propertyName="translationX"
android:duration="2000"
android:valueTo="0"
android:valueFrom="-50%p"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"/>
```
在代码中加载该动画:
```java
AnimatorSet animatorSet = (AnimatorSet) AnimatorInflater.loadAnimator(context, R.anim.animation);
animatorSet.setTarget(view);
animatorSet.start();
```
4. 转场动画(Transitions Animation)的实例代码:
通过代码实现:
```java
ChangeBounds changeBounds = new ChangeBounds();
changeBounds.setDuration(3000);
TransitionManager.beginDelayedTransition(transitionContainer, changeBounds);
// change view
ViewGroup.LayoutParams params = targetView.getLayoutParams();
params.width *= 2;
targetView.setLayoutParams(params);
```
通过XML实现:
在res/transition文件夹中,新建transition.xml文件,定义以下内容:
```xml
<?xml version="1.0" encoding="utf-8"?>
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
<changeBounds android:duration="3000" />
</transitionSet>
```
在代码中加载该动画:
```java
ViewTransition viewTransition = (ViewTransition)TransitionInflater.from(context).inflateTransition(R.transition.transition);
viewTransition.addTarget(view);
TransitionManager.go(viewTransition);
```