我们大家都知道android平台提供了两种动画,一种是Tween动画,即通过对场景里的对象不断进行图像变换(平移,缩放,旋转) 来产生动画效果; 第二种就是 Frame 动画,即顺序播放事先做好的图像,和电影类似。
首先来分析 Tween动画,Tween动画通过对View 的内容完成一系列的的图形变换(包括平移、缩放、旋转、改变透明度)来实现动画效果。它主要包括以下四种动画效果:
Alpha: 渐变透明度动画效果 以前也写过一个例子 -->
http://byandby.iteye.com/blog/828799
Scale: 渐变尺寸伸缩动画效果。
Translate: 画面转移位置移动动画效果
Rotate: 画面转移旋转动画效果。
具体来讲,Tween动画是通过预先定义一组指令,这些指令指定了图形变换的类型、触发时间、持续时间。程序沿着时间线执行这些指令就可以实现动画效果。因此我们首先需要定义Animation动画对象,然后设置该动画的一些属性,最后通过 startAnimation 方法来开始动画。网上的大多数例子都是以 xml文件的形式配置的 我们这里用代码实现一下。其实可能也不难就是参数有些多。下面就介绍 各个动画的属性:
AlphaAnimation(float fromAlpha, float toAlpha)
功能:构建一个渐变透明度动画
参数: fromAlpha 为动画起始透明度;toAlpha为动画结束透明度(0.0表示完全透明,1.0表示完全不透明)。
ScaleAnimation(float fromX, float toX, float fromY, float toY, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)
功能:构建一个渐变尺寸伸缩动画。
参数:fromX、toX 分别是起始和结束时X坐标上的伸缩尺寸。fromY、toY分别是起始和结束时 Y坐标上的伸缩尺寸。pivotXValue、pivotYValue 分别为动画相对于物件的X、Y坐标的开始位置 pivotYType pivotXType 分别为x、y的伸缩模式。
TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta)
功能:构建一个画面转换位置移动动画。
参数:fromXDelta、fromXDelta分别为起始坐标; toXDelta、toYDelta分别为结束坐标。
RotateAnimation(float fromDegress, float toDegress, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)
功能:构建一个旋转动画。
参数:fromDegress 为开始的角度; toDegress 为结束的角度。 pivotXType、pivotYType分别为x、y 的伸缩模式。pivotXValue、pivotYValue 分别为伸缩动画相对于x、y的坐标的开始位置。
setDuration(long durationMillis)
功能:设置动画显示的时间 以毫秒为单位。
startAnimation(Animation animation)
功能:开始播放动画
参数:animation为要播放的动画。
我们下边这个例子 通过 手机的上下左右 来实现这四种动画。
Activity01
package xiaohang.zhimeng;
import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
public class Activity01 extends Activity {
private GameView mGameView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mGameView = new GameView(this);
setContentView(mGameView);
}
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (mGameView == null) {
return false;
}
mGameView.onKeyUp(keyCode, event);
return true;
}
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (mGameView == null) {
return false;
}
if (keyCode == KeyEvent.KEYCODE_BACK) {
this.finish();
return true;
}
return super.onKeyDown(keyCode, event);
}
}
GameView
package xiaohang.zhimeng;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.drawable.BitmapDrawable;
import android.view.KeyEvent;
import android.view.View;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.RotateAnimation;
import android.view.animation.ScaleAnimation;
import android.view.animation.TranslateAnimation;
public class GameView extends View{
//定义Alpha动画
private Animation mAnimationAlpha = null;
//定义Scale动画
private Animation mAnimationScale = null;
//定义Translate动画
private Animation mAnimationTranslate = null;
//定义Rotate动画
private Animation mAnimationRotate = null;
//定义Bitmap对象
Bitmap mBitQQ = null;
public GameView(Context context) {
super(context);
//装载资源
mBitQQ = ((BitmapDrawable) getResources().getDrawable(R.drawable.xh)).getBitmap();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//绘制图片
canvas.drawBitmap(mBitQQ, 0, 0, null);
}
public boolean onKeyUp(int keyCode, KeyEvent event){
switch (keyCode) {
case KeyEvent.KEYCODE_DPAD_UP:
//创建Alpha动画
mAnimationAlpha = new AlphaAnimation(0.1f,1.0f);
//设置动画时间
mAnimationAlpha.setDuration(3000);
//开始播放动画
this.startAnimation(mAnimationAlpha);
break;
case KeyEvent.KEYCODE_DPAD_DOWN:
//创建Scal动画
mAnimationScale = new ScaleAnimation(0.0f, 1.0f, 0.0f, 1.0f,
Animation.RELATIVE_TO_SELF, 0.5f,
Animation.RELATIVE_TO_SELF, 0.5f
);
//设置动画的时间
mAnimationScale.setDuration(1000);
//开始播放动画
this.startAnimation(mAnimationScale);
break;
case KeyEvent.KEYCODE_DPAD_LEFT:
//创建Translate动画
mAnimationTranslate = new TranslateAnimation(10,100,10, 100);
//设置动画的时间
mAnimationTranslate.setDuration(1000);
//开始播放动画
this.startAnimation(mAnimationTranslate);
break;
case KeyEvent.KEYCODE_DPAD_RIGHT:
//创建Rotate动画
mAnimationRotate = new RotateAnimation(0.0f, +360,
Animation.RELATIVE_TO_SELF,0.5f,
Animation.RELATIVE_TO_SELF,0.5f);
//设置动画的时间
mAnimationRotate.setDuration(1000);
//开始播放动画
this.startAnimation(mAnimationRotate);
break;
}
return true;
}
}
这样的效果也可以通过配置xml文件实现大家可以去看我以前推荐过一些资料 里边有更多关于Animation动画的内容。
http://byandby.iteye.com/blog/827527
源码可以去附件下载
- 大小: 38.6 KB
- 大小: 21.7 KB
- 大小: 19.1 KB
- 大小: 35 KB
分享到:
相关推荐
在Android开发中,动画是提升用户体验的关键因素之一。Tween动画,又称补间动画,是Android提供的基础动画系统...通过实践和调试这些代码,你可以掌握Android动画系统的核心概念,从而在开发中创造出更丰富的视觉效果。
在"android Tween动画示例代码"中,你可能会看到如何创建这些不同类型的Tween动画以及如何组合它们的示例。文件名"xh_05_15_Test"可能包含了这些示例代码的详细实现,你可以通过查看这个文件来深入了解和学习Android...
Tween动画,又称平移动画,是Android提供的基础动画类型,主要用于对象的透明度、缩放、平移和旋转等属性的变化。让我们深入探讨Android Tween动画的源码,理解其工作原理。 首先,`alpha`动画涉及到的是对象的透明...
Tween动画,又称补间动画,是Android提供的基础动画类型,主要用于对象的平移、旋转、缩放和透明度变化等效果。本篇文章将深入探讨如何通过XML在Android中实现Tween动画。 首先,让我们了解Tween动画的基本原理。...
Android 平台提供了两类动画。 一类是Tween动画,就是对场景里的对象不断的进行图像变化来产生动画效果(旋转、平移、放缩和渐变);第二类就是 Frame动画,即顺序的播放事先做好的图像,与gif图片原理类似。 本例子...
它是Android动画系统中的一个重要组件,用于执行基于属性的动画。通过`ObjectAnimator.ofFloat()`或`ObjectAnimator.ofInt()`方法,我们可以指定目标对象和要动画化的属性。例如,要让一个View平滑地移动,可以创建...
通过学习和实践这个Tween动画的演示demo,开发者可以深入理解Android动画机制,为自己的应用增添生动有趣的交互体验。同时,也可以在此基础上探索更高级的动画技术,如属性动画(Property Animation)和视图动画...
Android---Tween动画 运用了4种Tween的动画效果,包括: rotate(旋转),scale(伸缩), alpha(透明度),translate(平移) 以及tween(综合4种效果)
首先,Tween动画的基础是`android.view.animation.Animation`类,它是所有Android动画的基类。为了创建一个Tween动画,我们需要继承这个类或使用已提供的子类,如`TranslateAnimation`(平移)、`ScaleAnimation`...
在Android开发中,Android SDK提供了Tween动画的支持,位于`android.view.animation`包下,包含如TranslateAnimation、ScaleAnimation、AlphaAnimation等类,分别用于处理平移、缩放和透明度的变化。 对于一个Tween...
在本示例中,“Tween动画的旋转缩放透明度和平移 demo”着重展示了如何通过Tween动画实现对象的旋转、缩放、透明度变化和移动效果。 首先,Tween动画的旋转功能允许我们以平滑的方式改变对象的角度。这通常通过设置...
这个“tween-engine-demo.jar”文件很可能是一个Tween动画引擎的示例库,它包含了实现Tween动画所需的各种类和方法。开发者可以导入这个库,然后根据需求创建和控制动画。"data"可能包含了一些配置文件或者资源,...
Tween动画在Android开发中是一种非常重要的视觉效果工具,它能够为用户界面增添动态感和流畅性,提升用户体验。Tween动画,全称为“Tween动画效果”,主要用于实现对象在屏幕上的平移、旋转、缩放以及透明度变化等...
综上所述,Android动画系统为开发者提供了多种方式来增强应用的视觉表现力。Tween动画适合简单的动画需求,Drawable动画适合创建帧动画,Property动画则提供了强大的属性动画功能,Material Design动画则为应用带来...
在TestAnimation这个项目中,你可能找到了对应的XML动画资源文件和对应的Java或Kotlin代码示例,通过运行这些示例,你可以直观地看到每个Tween动画效果的实际表现,进一步理解和掌握Android Tween动画的使用。...
在项目`AnimationTest`中,你可以找到演示以上所有动画效果的示例代码,这将帮助你更好地理解和应用这些XML Tween动画到实际项目中。通过实践,你可以进一步探索如何调整动画参数以实现更精细的控制,或者与其他动画...
该Demo,主要以xml形式实现了Animation动画中的Tween动画(另一种动画Frame动画Demo,稍后奉上),Tween动画的另一种实现形式是直接在代码中实现,相关Demo已上传,有需要的读者请到我的资源文件中下载即可。
补间动画是Android动画系统的一部分,允许开发者在指定时间内改变一个或多个属性,如大小(scale)、旋转(rotate)、位置(translate)和透明度(alpha),从而实现动态效果。 补间动画的工作原理是通过改变对象的...
Android Tween Animation动画的使用demo,以及自定义动画,原理解析,相关博客: http://blog.csdn.net/w18756901575/article/details/53081551
在Android游戏开发中,Tween动画是一种非常常见的动画技术,它主要用于在两个或多个属性值之间进行平滑的过渡,从而创造出动态效果。Tween动画在不涉及复杂图形变换的情况下,能够轻松实现物体位置、大小、透明度等...