Android Tween动画

Android系统提供两种动画:一种是Tween,用来实现视图组件的移动、放大缩小、旋转及透明度变化;另一种是Frame动画,通过切换帧来实现,和电影类似。

Tween类在android.view.animation包中,这个包包含了一些常用的动画类:

  • Animation 动画抽象类,是个基类,其他几种类都继承该类。
  • ScaleAnimation 用于放大、缩小的动画类
  • AlphaAniamtion 用于控制透明度变化的动画类
  • RotateAnimation 用于控制旋转变化的动画类
  • TranslateAnimation 用于控制位置变化的动画类
  • AnimationSet 定义动画合集的类,动画合成
  • AnimationUtil 动画工具类

Tween可以配置在xml文件中,也可以直接硬编码到代码中(推荐配置到xml文件中)。

方法1: 硬编码到文件中

package com.yeetrack.android.animation;

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 MainActivity extends Activity {

private Button scaleButton;
private Button alphaButton;
private Button translateButton;
private Button rotateButton;

private ImageView imageView;
@Override

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    scaleButton = (Button)findViewById(R.id.testScaleId);
    alphaButton = (Button)findViewById(R.id.testAlphaId);
    translateButton = (Button)findViewById(R.id.testTranslateId);
    rotateButton = (Button)findViewById(R.id.testRotateId);
    imageView = (ImageView)findViewById(R.id.imageView);
    imageView.setImageResource(R.drawable.annie);

    OnClickListener onClickLinstener = new OnClickListener() 
    {

        @Override
        public void onClick(View v) 
        {
            // TODO Auto-generated method stub
            switch(v.getId())
            {
            case R.id.testScaleId:
                //前四个参数,表示从无限小扩大到一倍大小;后面两个0.1f,控制着增长的点
                Animation animation = new ScaleAnimation(0f, 1f, 0f, 1f, Animation.RELATIVE_TO_SELF, 0.1f, Animation.RELATIVE_TO_SELF, 0.1f);
                animation.setDuration(3000);
                imageView.startAnimation(animation);
                break;
            case R.id.testAlphaId:
                Animation animation2 = new AlphaAnimation(0.1f, 1f);
                animation2.setDuration(3000);
                imageView.startAnimation(animation2);
                break;
            case R.id.testTranslateId:
                Animation animation3 = new TranslateAnimation(10,  100, 10 ,100);
                animation3.setDuration(3000);
                imageView.startAnimation(animation3);
                break;

            case R.id.testRotateId:
                //从0度选装180度,两个0.5f,表示围绕自身中点旋转,这两个点控制着旋转中心
                Animation animation4 = new RotateAnimation(0f, 180f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
                animation4.setDuration(3000);
                imageView.startAnimation(animation4);
                break;
            }

        }
    };

    scaleButton.setOnClickListener(onClickLinstener);
    alphaButton.setOnClickListener(onClickLinstener);
    translateButton.setOnClickListener(onClickLinstener);
    rotateButton.setOnClickListener(onClickLinstener);
}

}

配置到xml文件中

推荐的方法是配置到外部的xml文件中,这样和代码分离,方便以后配置。

在res目录下新建anim文件夹,新建一个translate.xml文件,内容如下:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate 
    android:fromXDelta="0"
    android:toXDelta="100"
    android:fromYDelta="0"
    android:toYDelta="100"
    android:duration="2000" />
</set>

这样就配置了平移的动画,使用动画的代码如下:

private Animation translateAnimation;
translateAnimation = AnimationUtils.loadAnimation(this, R.anim.translate);
imageView.startAnimation(translateAnimation); 

ScaleAnimationAlphaAnimationRotateAnimation也是一样的配置。

版权声明

本站文章、图片、视频等(除转载外),均采用知识共享署名 4.0 国际许可协议(CC BY-NC-SA 4.0),转载请注明出处、非商业性使用、并且以相同协议共享。

© 空空博客,本文链接:https://www.yeetrack.com/?p=612