关于动画的实现,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=\'#\'" /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>

缩放动画:


更多相关文章

  1. Android 属性动画(一):Animator属性动画相对于Animation的优势
  2. Android自定义View总结(一)基础知识与实例
  3. android logo、android开机动画改变详解
  4. AIDL (Android Interface Definition Language) Android 接口定
  5. Android自定义属性时TypedArray的使用方法
  6. Android高手进阶教程之----Android 中自定义属性(attr.xml,Typed
  7. Android学习笔记: Android动画特效

随机推荐

  1. 我对android的第一印象
  2. Android模仿Buttonbar(style="@android:st
  3. 一个简单的Android圆形ProgressBar
  4. Selector的一些state使用
  5. Android(安卓)保存文件路径
  6. Android(安卓)C 语言读取系统属性
  7. android 系统级 bug audio latency
  8. Android(安卓)jni系统变量、函数、接口定
  9. Android之UI学习篇七:ImageView实现适屏和
  10. Android中设置定时器