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中的补间动画。
最终效果:
很小的一个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>
推荐阅读
-
Android 中Animation简单例子
-
Android中实现Runnable接口简单例子
-
Gradle在Android Studio中的简单使用
-
浅谈Android注解在日常开发中的简单使用
-
Android中SharedPreference详解及简单实例
-
Android 中 Tweened animation的实例详解
-
Android 中自定义ContentProvider与ContentObserver的使用简单实例
-
Android中TabLayout+ViewPager 简单实现app底部Tab导航栏
-
Android中SharedPreferences简单使用实例
-
简单介绍Android开发中的Activity控件的基本概念