欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android 中Animation简单例子

程序员文章站 2024-01-31 12:19:58
...

关于动画的实现,Android提供了Animation,在Android SDK介绍了2种Animation模式:

1. Tween Animation:通过对场景里的对象不断做图像变换(平移、缩放、旋转)产生动画效果,即是一种渐变动画;

2. Frame Animation:顺序播放事先做好的图像,是一种画面转换动画。

动画类型

下面先来看看Android提供的动画类型。Android的animation由四种类型组成

在XML文件中:

  • alpha 渐变透明度动画效果
  • scale 渐变尺寸伸缩动画效果
  • translate 画面转换位置移动动画效果
  • rotate 画面转移旋转动画效果

动画的实现方法:

animation可以定义在xml中,也 可以在类中动态定义,和控件的定义类似。

这里用的是静态定义。

首先需要在项目的res文件夹 中新建anim文件夹,然后在其中添加动画文件。

在类中调用的时候,要用到下面的两个语句:

nimation ani = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.alpha_anim);
View.startAnimation(ani);


今天的例子要实现的是TweenAnimation,类似于Flash中的补间动画。


最终效果:

Android 中Animation简单例子

Android 中Animation简单例子

很小的一个bug却卡了一个晚上(xml文件定义的时候,尖括号位置敲错了),如果再给我遇到这样的bug,

我会轻轻地对它说:艹!

代码明天上...睡觉。


代码清单:

主Activity:

package com.example.animationtest;


import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;

public class AnimationActivity extends Activity {
	private ImageView myImageView;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_animation);
        myImageView=(ImageView)findViewById(R.id.myImageView);
    }

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		menu.add(0,1,1,R.string.scale);  
		menu.add(0,2,2,R.string.rotate);  
		menu.add(0,3,3,R.string.alpha);   
		menu.add(0,4,4,R.string.translate); 
		menu.add(0,5,5,R.string.exit); 
		return true;  
	}
	@Override    
	public boolean onMenuItemSelected(int featureId, MenuItem item) {    
		// TODO Auto-generated method stub    
		if(item.getItemId()==1) scaleAnim();  
		if(item.getItemId()==2) rotateAnim();
		if(item.getItemId()==3) alphaAnim();
		if(item.getItemId()==4) transAnim();
		if(item.getItemId()==5) finish();    
		return super.onMenuItemSelected(featureId, item);    
	}

	private void rotateAnim() {
		// TODO Auto-generated method stub
		Animation ani = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.rotate_anim);
		myImageView.startAnimation(ani);
	}
	private void alphaAnim() {
		// TODO Auto-generated method stub
		Animation ani = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.alpha_anim);
		myImageView.startAnimation(ani);
	}

	private void scaleAnim() {
		// TODO Auto-generated method stub
		Animation ani = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.scale_anim);
		myImageView.startAnimation(ani);
		
	}  
	private void transAnim()
	{
		Animation ani = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.translate_anim);
		myImageView.startAnimation(ani);
	}
	
}


布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_gravity="center"
    android:orientation="vertical"
    android:background="#FFFFFF"  >

    <ImageView
        android:id="@+id/myImageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="50dp"
        android:scaleType="matrix"
        android:src="@drawable/pic" >
    </ImageView>

</LinearLayout>





动画文件(注意尖括号的位置,格式一定要正确!)

移动动画:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
    <translate    
        android:repeatCount="2"    
        android:fromXDelta="-30"    
        android:fromYDelta="-30"    
        android:toXDelta="-80"          
        android:toYDelta="200"    
        android:duration="3000"    
    />    

</set>

旋转动画:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<rotate    
        android:interpolator="@android:anim/accelerate_interpolator"    
        android:repeatCount="2"    
        android:fromDegrees="0"    
        android:toDegrees="+270"    
        android:pivotX="50%"    
        android:pivotY="50%"    
        android:duration="3000"    
    />   
</set>

透明度动画:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">

    <alpha
        android:duration="1000"
        android:fromAlpha="0.1"
        android:repeatCount="infinite"
        android:repeatMode="reverse"
        android:toAlpha="1.0" >
    </alpha>

</set>

缩放动画:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <scale
        android:duration="500"
        android:fillAfter="true"
        android:fromXScale="0.0"
        android:fromYScale="0.0"
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:pivotX="50%"
        android:pivotY="50"
        android:toXScale="1.0"
        android:toYScale="1.0" >
    </scale>

</set>