`
mmdev
  • 浏览: 12954481 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

Android 中Animation简单例子

 
阅读更多

关于动画的实现,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中的补间动画。


最终效果:



很小的一个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>


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics