在Android中系统给我们提供了两种实现动画效果的方法,其中一种是Tween,还有一种是Frame动画;

Tween动画中,我们可以通过Tween动画去使得视图实现视图放大,缩小,旋转,渐变等等功能;这个动画类在android.view.animation包下面,

主要为我们提供以下的一些常用方法:(【注】以下对于些类的解释说明,是我看文档自己翻译的,可能有些地方不准确,也算是自己作为学习英语的机会,还请大家见谅一下哈)

Animation 这是动画的抽象类,其他的几个实现的动画类继承这个类

AnimationSet这是动画的属性的集合类

AnimationUtils 这个类是定义动画工具类

AlphaAnimation 这个类可以对动画的透明度进行控制

RotateAnimation 这个类可以对动画的旋转的位置进行控制
ScaleAnimation 这个类可以对动画的大小进行控制

TranslateAnimation 这个类可以对动画位置进行控制

下面是Twwen动画的一些常用动画实现类的说明

AlphaAnimation 类(渐变调整透明度)常用的构造方法
AlphaAnimation(float fromAlpha, float toAlpha)
参数说明:

float fromAlpha :动画刚开始的透明度 ,

float toAlpha:动画结束的透明度 取值范围是(0.0到1.0,;0.0代表不透明,1.0代表完全透明)

RoateAnimation 类(动画旋转) 常用的构造方法
RotateAnimation(float fromDegrees, float toDegrees),
RotateAnimation(float fromDegrees, float toDegrees, float pivotX, float pivotY),
RotateAnimation(float fromDegrees, float toDegrees, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)
参数说明:fromDegrees:开始旋转的角度,.toDegrees:结束旋转的角度
.pivotXType:在X坐标方向的伸缩的方式,pivotYType:在Y坐标方向的伸缩方式;
pivotXValue:在X坐标方向的伸缩值,pivotYValue:在Y坐标方向的伸缩值

ScaleAnimation 类(动画大小的控制类) 常用的构造方法
ScaleAnimation(float fromX, float toX, float fromY, float toY)
ScaleAnimation(float fromX, float toX, float fromY, float toY, float pivotX, float pivotY)
ScaleAnimation(float fromX, float toX, float fromY, float toY, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)
参数说明:fromX: 起始的X坐标,toX:结束的X坐标,fromY:起始的Y坐标,toY:结束的Y坐标
.pivotXType:在X坐标方向的伸缩的方式,pivotYType:在Y坐标方向的伸缩方式;
pivotXValue:在X坐标方向的伸缩值,pivotYValue:在Y坐标方向的伸缩值

TranslateAnimation类(动画位置控制) 常用的构造方法
TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta)
参数说明: fromXDelta:起始的X坐标;toXDelta:结束的X坐标
fromYDelta:起始的Y坐标,toYDelta:结束的Y坐标


要实现Twwen动画的效果,有两种办法 第一个种是直接在代码中进行设置,第二种是在XML文件进行配置;

首先下看下直接编码设置的办法:

Demo源代码如下:

package com.android.animation; import com.android.R; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.view.animation.AlphaAnimation; import android.view.animation.Animation; import android.view.animation.RotateAnimation; import android.view.animation.ScaleAnimation; import android.view.animation.TranslateAnimation; import android.widget.Button; import android.widget.ImageView; public class Demo_Animation extends Activity { // 定义四个按钮,分别对用四种动画效果操作 private Button alpha, roate, scale, translate; // 声明ImageView组件 private ImageView animation_test; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.animation); animation_test = (ImageView) this.findViewById(R.id.test_animation); alpha = (Button) this.findViewById(R.id.alpha); roate = (Button) this.findViewById(R.id.roate); scale = (Button) this.findViewById(R.id.scale); translate = (Button) this.findViewById(R.id.translate); // 为按钮组件添加监听事件 alpha.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // 创建渐变的 AlphaAnimation()构造方法中 参数要加 f 因为是浮点型的 Animation alphaAnimation = new AlphaAnimation(0.0f, 1.0f); // 设置画面渐变的时间 单位:毫秒 本实例设置为3 s alphaAnimation.setDuration(3000); // 为图片添加效果,开始动画 animation_test.setAnimation(alphaAnimation); } }); roate.setOnClickListener(new OnClickListener() { /** * 其中有设置旋转的伸缩的方法 有 * * @author jiangqq ①:Animation.RELATIVE_TO_SELF * @author jiangqq ②:Animation.RELATIVE_TO_PARENT * @author jiangqq ③:Animation.ABSOLUTE */ @Override public void onClick(View v) { // 设置旋转 Animation roateAnimation = new RotateAnimation(0f, +180f, Animation.RELATIVE_TO_SELF, 1.0f, Animation.RELATIVE_TO_SELF, 1.0f); // 设置画面渐变的时间 单位:毫秒 本实例设置为3 s roateAnimation.setDuration(3000); // 为图片添加效果,开始动画 animation_test.setAnimation(roateAnimation); } }); scale.setOnClickListener(new OnClickListener() { /** * 其中沿X轴与Y轴的伸缩方式的三种模式 在上面roate监听类方法中有说明了 */ @Override public void onClick(View v) { Animation scaleAnimation = new ScaleAnimation(0.0f, 1.0f, 0.0f, 1.0f, Animation.RELATIVE_TO_SELF, 1.5f, Animation.RELATIVE_TO_SELF, 1.5f); // 设置画面渐变的时间 单位:毫秒 本实例设置为3 s scaleAnimation.setDuration(3000); // 为图片添加效果,开始动画 animation_test.setAnimation(scaleAnimation); } }); translate.setOnClickListener(new OnClickListener() { /** * 位置变化 */ @Override public void onClick(View v) { Animation translateAnimation = new TranslateAnimation(0.0f, 15.0f, 0.0f, 15.0f); // 设置画面渐变的时间 单位:毫秒 本实例设置为3 s translateAnimation.setDuration(3000); // 为图片添加效果,开始动画 animation_test.setAnimation(translateAnimation); } }); } }


布局文件如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/test_animation"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/animation_test" />

    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="20dip" >

        <Button
            android:id="@+id/alpha"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="alpha" />

        <Button
            android:id="@+id/roate"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="roate" />

        <Button
            android:id="@+id/scale"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="scale" />

        <Button
            android:id="@+id/translate"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="translate" />
    </LinearLayout>

</LinearLayout>


android 原生动画文件 安卓动画生硬_ide

效果截图: