Android 中Animation简单例子
16lz
2021-01-23
关于动画的实现,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>
缩放动画:
更多相关文章
- Android 属性动画(一):Animator属性动画相对于Animation的优势
- Android自定义View总结(一)基础知识与实例
- android logo、android开机动画改变详解
- AIDL (Android Interface Definition Language) Android 接口定
- Android自定义属性时TypedArray的使用方法
- Android高手进阶教程之----Android 中自定义属性(attr.xml,Typed
- Android学习笔记: Android动画特效