`
1140566087
  • 浏览: 559371 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
博客专栏
2c4ae07c-10c2-3bb0-a106-d91fe0a10f37
c/c++ 入门笔记
浏览量:18540
3161ba8d-c410-3ef9-871c-3e48524c5263
Android 学习笔记
浏览量:314187
Group-logo
J2ME 基础学习课程集
浏览量:18759
A98a97d4-eb03-3faf-af96-c7c28f709feb
Spring 学习过程记录...
浏览量:17583
社区版块
存档分类
最新评论

Android 之 Tween补间动画

阅读更多
                          
Tween 补间动画

1、优点:节省磁盘空间;
2、缺点:动画很复杂的时候无法自动生成中间图像;例如电影画面的组成,画面复杂,无法    下一步;
3、Android 提供的 4 种 补间动画效果:移动、旋转、缩放和透明度渐变;
4、移动补间动画:
   实现方式:
            xml文件配置  
            编码配置

5、提示:补间动画文件存放在res/anim 或者 res/drawable 下面



补间动画 -- 设置透明度: alpha
<?xml version="1.0" encoding="utf-8"?>

<!-- 透明渐变动画 -->
<!--
	说明:
	android:fromAlpha 代表起始的alpha值,浮点值,0.0 和 1.0之间
	android:toAlpha   代表结尾的值,浮点值,0.0 和 1.0 之间
-->
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="8000"
    android:fromAlpha="0.0"
    android:repeatCount="infinite"
    android:toAlpha="1.0" >

</alpha>


旋转补间动画 -- rotate

<?xml version="1.0" encoding="utf-8"?>

<!-- 旋转补间动画测试  -->
<!-- 
	说明:
	rotate 旋转动画,java 中对象为:RotateAnimation
	android:fromDegrees 代表起始角度、浮点值,单位:度
	android:toDegrees   代表结尾角度,浮点值,单位:度
	android:pivotX      代表旋转中心的  X 坐标值;
	android:pivotY      代表旋转中心的  Y 坐标值;
	android:fillAfter   执行完后是否保持最后的状态;
	android:duration    代表动画持续的时间,单位毫秒
	
	旋转补间动画的渲染模式:
	android:interpolator="@android:anim/accelerate_interpolator"
	                     设置动画渲染器为加速动画(动画播放中越来越快)
	android:interpolator="@android:anim/decelerate_interpolator"
	                     设置动画渲染器为减速动画(动画播放中越来越慢)
	android:interpolator="@android:anim/accelerate_decelerate_interpolator"
			设置动画渲染器为先加速再减速(开始最快,逐渐减慢)
			
		提示:默认为匀速
 -->
<rotate xmlns:android="http://schemas.android.com/apk/res/android" 
    android:interpolator="@android:anim/accelerate_interpolator"
    android:fromDegrees="0"
    android:toDegrees="360"
    android:pivotX = "50%"
    android:pivotY="50%"
    android:duration="2000"
    
    >
   
</rotate>



缩放补间动画:scale

<?xml version="1.0" encoding="utf-8"?>

<!-- 缩放补间动画 -->
<!-- 
	说明:
	android:fromXScale : 表示开始时 X 的缩放比例
	android:fromYScale : 表示开始时 Y 的缩放比例
	android:toXScale   : 表示结束时 X 的缩放比例
	android:toYScale   : 表示结束时 Y 的缩放比例
	android:pivotX     : 表示沿 X 轴方向缩放的支点位置,50% 表示中心位置;
	android:pivotY     : 表示沿 Y 轴方向缩放的支点位置,50% 表示中心位置;
	
	缩放比例的取值规则:
	0.0 : 表示缩放到没有;
	1.0 : 表示正常不收缩
	>1.0: 表示将组件放大到相应的比例;
	<1.0: 表示将组件收缩到相应的比例;
	
 -->
<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="2000"
    android:fromXScale="0.0"
    android:fromYScale="0.0"
    android:pivotX="50%"
    android:pivotY="50%"
    android:toXScale="2.0"
    android:toYScale="2.0" >

</scale>



移动补间动画:

<?xml version="1.0" encoding="utf-8"?>

<!-- 移动补间动画 , 测试案例 -->
<!-- 
	说明:
    android:fromXDelta 属性代表起始X方向的位置
    android:toXDelta 代表结尾X方向上的位置
    android:fromYDelta 代表起始方向Y 的位置
    android:toYDelta 属性代表结尾Y  方向的位置
    android:fillAfter 是否定格在尾端
    android:repeatCount 循环次数
    android:duration 执行时间
    android:interpolator 运行速度定义:匀速,快,慢 等....

 -->
<translate xmlns:android="http://schemas.android.com/apk/res/android"
	android:interpolator="@android:anim/accelerate_interpolator"
	android:fillAfter="true"
	android:fromXDelta = "0"
	android:fromYDelta = "0"
	android:toXDelta = "320"
	android:toYDelta = "480"
	android:duration = "2000"
	android:repeatCount = "5"   
    >
    
</translate>



在代码中使用补间动画达到对应的效果:

package com.sun.tween;

import java.util.Timer;
import java.util.TimerTask;

import android.app.Activity;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.AnimationUtils;
import android.view.animation.RotateAnimation;
import android.view.animation.ScaleAnimation;
import android.view.animation.TranslateAnimation;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends Activity {

	private ImageView image;
	private Button translate,scale,rotate,alpha,heart,bird;
	private ScaleAnimation large,small; // 缩放动画对象
	private float curX = 0;
	private float curY = 0;
	private float nextX ,nextY;
	
	// 初始化
	public void init(){
		
		translate = (Button) findViewById(R.id.button1);
		scale = (Button) findViewById(R.id.button2);
		rotate = (Button) findViewById(R.id.button3);
		alpha = (Button) findViewById(R.id.button4);
		heart = (Button) findViewById(R.id.heart);
		bird = (Button) findViewById(R.id.bird);
		
		translate.setOnClickListener(listener);
		scale.setOnClickListener(listener);
		rotate.setOnClickListener(listener);
		alpha.setOnClickListener(listener);
		heart.setOnClickListener(listener);
		bird.setOnClickListener(listener);
	}
	
	// 入口
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		init();
		image = (ImageView) findViewById(R.id.image);
		
	}
	
	// 点击事件监听器
	private View.OnClickListener listener = new View.OnClickListener() {
		
		public void onClick(View v) {
			
			if(v.getId() == R.id.button1){
				translateAction();
				return;
			}
			if(v.getId() == R.id.button2){
				scaleAction();
				return;
			}
			if(v.getId() == R.id.button3){
				rotateAction();
				return;
			}
			if(v.getId() == R.id.button4){
				alphaAction();
				return;
			}
			if(v.getId() == R.id.heart){
				heartAction();
				return;
			}
			if(v.getId() == R.id.bird){
				birdAction();
				return;
			}
		}
	};
	
	/*==================================Start 小鸟飞翔  ===============================================================*/
	/**
	 * 小鸟飞翔效果 -- 帧动画实现翅膀拍动,位置右 补间 动画实现
	 */
	public void birdAction(){
		
		// 设置 图片资源为 帧动画资源
		AnimationDrawable ad = (AnimationDrawable) getResources().getDrawable(R.drawable.bird_fly);
		image.setImageDrawable(ad);
		ad.start();
		
		// 补间动画实现 -- 移动 
		/*  Timer() 定时器 
		 	TimerTask 定时任务
		 */
		new Timer().schedule(new TimerTask(){
			
			// 定时的时间到了执行的任务
			public void run() {
				Message message = new Message();
				message.what = 0x1; // 0x 表示该数为 整数 , 消息ID 编号
				handler.sendMessage(message);
				Log.i("msg", "run()... 执行一次");
			}},0, 200);
	}
	
	// 消息处理机制,执行对应的任务
	private Handler handler = new Handler(){
		
		public void handleMessage(Message msg) {
			super.handleMessage(msg);
			if(msg.what == 0x1){
				if(nextX>300){
					curX = nextX = 0; // 从头开始
				}else{
					nextX+=5; // 固定水平移动
				}
				
				// 计算下一步 Y 的坐标
				nextY = (float) (curY+(Math.random()*10-5));
				
				// 移动补间动作
				Animation trans = new TranslateAnimation(curX, nextX, curY, nextY);
				trans.setDuration(2000);
				image.setAnimation(trans); // 启动
				
				// 交换坐标数据
				curX = nextX;
				curY = nextY;
				
			}
		}
		
	};
	
	/*==================================End 小鸟飞翔  ===========================================================================*/

	/**
	 * 移动补间动画测试
	 */
	public void translateAction(){
	
		// 加载补间动画文件
		TranslateAnimation ta = (TranslateAnimation) AnimationUtils.loadAnimation(MainActivity.this, R.drawable.translate);
		image.setAnimation(ta); // 将动画应用到组件上
		
		/* 代码实现 */
		/*
		Animation translate = new TranslateAnimation(0, 320, 0,480);
		translate.setDuration(5000); 
		image.setAnimation(translate);
		*/
	}
	
	/**
	 * 缩放补间动画测试
	 */
	public void scaleAction(){
		
		// 加载动画文件
		ScaleAnimation sa = (ScaleAnimation) AnimationUtils.loadAnimation(MainActivity.this,R.drawable.scale);
		image.startAnimation(sa); // 应用到组件上
		
		/* 代码实现 */
		/*
		Animation scale = new ScaleAnimation(0f, 3f, 0f, 3f);
		scale.setDuration(5000);
		image.setAnimation(scale);
		*/
	}
	
	/**
	 * 旋转补间动画测试
	 */
	public void rotateAction(){
		// 加载动画文件
		RotateAnimation ra = (RotateAnimation) AnimationUtils.loadAnimation(MainActivity.this,R.drawable.rotate);
		// 应用动画
		image.setAnimation(ra);
		
		/* 代码实现 */
		/*
		Animation rotate = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
		rotate.setDuration(5000);
		image.setAnimation(rotate);
		*/
	}
	
	/**
	 * 透明渐变动画测试
	 */
	public void alphaAction(){
		// 加载动画文件
		AlphaAnimation aa = (AlphaAnimation) AnimationUtils.loadAnimation(MainActivity.this, R.drawable.alpha);
		image.setAnimation(aa);
		
		/* 代码实现  */
		/*
		Animation alpha = new AlphaAnimation(0.0f, 1.0f);
		alpha.setDuration(5000);
		image.startAnimation(alpha);
		*/
	}
	
	/**
	 * 心型效果 -- 心动的感觉
	 */
	public void heartAction(){
		
		// 加载 缩放 动画文件
		large = (ScaleAnimation) AnimationUtils.loadAnimation(MainActivity.this, R.drawable.scale);
		small = (ScaleAnimation) AnimationUtils.loadAnimation(MainActivity.this, R.drawable.scale_small);
		
		// 设置动画监听器
		large.setAnimationListener(animationListener);
		small.setAnimationListener(animationListener);
		
		// 初始动作
		image.setAnimation(large);
		
	}
	
	// 补间动画监听器
	private AnimationListener animationListener = new AnimationListener() {
		
		// 动画开始时调用
		public void onAnimationStart(Animation animation) {
			
			Log.i("msg","onAnimationStart()...");
		}
		
		// 动画重复调用
		public void onAnimationRepeat(Animation animation) {
			
			Log.i("msg","onAnimationRepeat()...");
		}
		
		// 动画结束调用
		public void onAnimationEnd(Animation animation) {
		
			// 使用 hashCode 进行匹配对应关系
			if(animation.hashCode() == large.hashCode()){
				image.startAnimation(small);
			}else{
				image.startAnimation(large);
			}
			
			Log.i("msg", "onAnimationEnd()...");
		
		}
	};

}



分享到:
评论

相关推荐

    android补间动画

    在Android开发中,补间动画(Tween Animation)是一种常见的视觉效果技术,用于为视图对象创建平滑的过渡效果。补间动画通过在一段时间内改变特定属性(如大小、透明度、位置或旋转角度)来实现动态效果。下面将详细...

    Android-Animation动画之Tween Animation补间动画

    补间动画(Tween Animation)是Android提供的基本动画类型,它通过对对象的透明度、大小、位置或旋转等属性进行平滑过渡来实现视觉效果。本篇文章将深入探讨Android中的Tween Animation,包括其原理、使用方法以及...

    Android中补间动画TweenAnimation

    在Android开发中,补间动画(Tween Animation)是动画系统的一部分,用于实现对象在屏幕上位置、大小、透明度等属性的变化。补间动画基于帧,通过连续改变对象属性来创建平滑过渡效果,使得视觉上产生动画的效果。...

    Android动画之补间动画

    补间动画(Tween Animation)是Android提供的一种基础动画机制,主要用于对象位置、大小、旋转和透明度等属性的变化,从而实现平滑过渡的效果。本文将深入探讨Android补间动画的原理、使用方法及应用场景。 一、补...

    android自定义补间动画

    补间动画(Tween Animation)是Android提供的一种基础动画形式,用于平滑地改变一个对象的视觉属性,如位置、大小、透明度等。本资源主要探讨如何在Android中创建自定义的补间动画。 一、补间动画基础 补间动画基于...

    Android帧动画和补间动画总结

    本文将深入探讨两种主要的动画类型:帧动画(Frame Animation)和补间动画(Tween Animation),并提供相应的代码实现示例。 帧动画是通过连续播放一系列静态图像来创建动态效果的一种方式。在Android中,我们可以...

    Tween 补间动画(软编码方式)

    Tween补间动画是Android系统提供的一种基本动画类型,主要用于改变对象在屏幕上的位置、大小、透明度等属性,它通过平滑过渡来实现对象的变化,给用户带来流畅的视觉效果。本篇文章将深入探讨Tween补间动画的软编码...

    Android补间动画

    在Android开发中,补间动画(Tween Animation)是一种常见的视觉效果技术,用于为用户界面增添动态元素,提高用户体验。补间动画得名于“补间”这个概念,它是指通过计算两个关键帧之间的中间状态来生成平滑的过渡...

    Tween 补间动画(硬编码方式)

    Tween动画,又称为补间动画,是Android提供的基础动画系统的一部分,允许开发者对视图对象进行平移、旋转、缩放和改变透明度等操作。本篇将深入探讨如何通过硬编码方式实现Tween动画,并通过源码分析增强理解。 一...

    Android下补间动画demo

    补间动画(Tween Animation)是Android系统提供的一种基础动画机制,主要用于对象属性的变化,如平移、旋转、缩放和透明度变化等。本篇将深入探讨Android补间动画的概念、实现方式以及如何通过提供的`...

    Android 百战经典-Android补间动画(Tween)大观园

    在Android开发中,补间动画(Tween Animation)是实现动态效果的一种重要手段,它通过平移、旋转、缩放和改变透明度等属性变化来创建流畅的视觉效果。本篇文章将深入探讨Android补间动画的基本概念、使用方法及其...

    安卓补间动画大全源码

    在Android开发中,补间动画(Tween Animation)是一种常见的视觉效果技术,用于为用户界面增添动态元素,提高用户体验。补间动画主要用于改变View对象的位置、大小、透明度等属性,通过平滑过渡来实现动画效果。这个...

    属性动画帧动画补间动画合集

    属性动画(Property Animation)、帧动画(Frame Animation)和补间动画(Tween Animation)是Android系统提供的三种主要的动画机制,每种都有其独特的应用场景和优势。本合集的"属性动画帧动画补间动画合集"是一个...

    Android中补间动画在activity切换时使用

    在Android应用开发中,补间动画(Tween Animation)是一种基础且强大的工具,它允许开发者为UI元素添加平滑的过渡效果。本示例主要讲解如何在Activity切换时使用补间动画,以提升用户体验并增强应用的视觉吸引力。 ...

    自定义补间动画演示Demo

    在Android中,补间动画分为两种:补间动画(Tween Animation)和帧动画(Frame Animation)。 2. 自定义补间动画:虽然Android提供了许多预设的动画效果,但有时候这些预设效果无法满足开发者的需求。在这种情况下...

    Android中补间动画的基本使用

    补间动画(Tween Animation)是Android系统提供的基础动画类型,它通过平移、旋转、缩放和改变透明度等效果来实现对象的动态变化。本文将详细介绍补间动画的基本使用方法,包括设置动画属性、创建XML动画资源和在...

    Android补间动画小实例

    在Android开发中,补间动画(Tween Animation)是一种常见的视觉效果技术,用于让视图对象在一定时间内平滑地从一种状态过渡到另一种状态。补间动画的核心是改变对象的属性,如位置、大小、透明度等,通过一系列连续...

    Android 补间动画

    在Android开发中,补间动画(Tween Animation)是一种常见的视觉效果技术,用于为用户界面元素创造动态过渡。本文将深入探讨Android补间动画的四个主要类型:平移、旋转、缩放和渐变,并提供详细实现方法。 首先,...

    Android动画之补间动画(Tween Animation)基础学习

    补间动画(Tween Animation)是Android提供的一种动画机制,它通过对视图进行连续的图像变换来创建动态效果。本篇将深入探讨补间动画的基础知识,包括其原理、分类、实现方式以及效果展示。 ### 原理 补间动画的...

Global site tag (gtag.js) - Google Analytics