`
yunlonglove
  • 浏览: 242014 次
社区版块
存档分类
最新评论

Android开发之动画实现

 
阅读更多

Android开发之动画实现

/*

* Android开发之动画实现

* 北京Android俱乐部群:167839253

* Created on: 2011-12-09

* Author: blueeagle

* Email: liujiaxiang@gmail.com

*/

在《Android开发之PopupWindow》这篇文章中,已经初步涉及到了动画的相关内容。对于一个弹出对话框。其动画效果可以利用xml文件进行设置,复习一下,就是对于对话框的飞进飞出,定义两个XML文件。例如:

飞入动画xml:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:interpolator="@android:anim/accelerate_decelerate_interpolator"
       android:fromYDelta="-100"
       android:toYDelta="0"
       android:duration="1000"
       android:fillEnabled="true"
       android:fillAfter="true"
       />
        <scale android:fromXScale="0.6" android:toXScale="1.0"
                android:fromYScale="0.6" android:toYScale="1.4" android:pivotX="50%"
                android:pivotY="50%" android:duration="2000" 
                android:fillAfter="false"/>
        <alpha android:interpolator="@android:anim/decelerate_interpolator"
                android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="2000" />            
        <rotate
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:fromDegrees="0"
        android:toDegrees="+359"
        android:pivotX="50%"
        android:pivotY="50%"
        android:duration="2000">
        </rotate>
</set>

anin.xml

飞出动画:

anout.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="true"
    >
    <translate android:interpolator="@android:anim/accelerate_decelerate_interpolator"
       android:fromYDelta="0"
        android:toYDelta="-100"
       android:duration="1000"
       android:fillEnabled="true"
       android:fillAfter="true"
       />
               <scale android:fromXScale="1.0" android:toXScale="0.4"
                android:fromYScale="1.0" android:toYScale="0.4" android:pivotX="50%"
                android:pivotY="50%" android:duration="2000" />
    <alpha android:interpolator="@android:anim/decelerate_interpolator"
       android:fromAlpha="1.0" 
       android:toAlpha="0.0" 
       android:duration="2000" 
       />
</set>


总结一下上面动画的特点:

1. 透明度渐变

2. 尺寸伸缩

3. 画面旋转

4. 位置移动

那么这类动画,可以在xml中体现,当然也可以在代码中的体现。在代码中对于上述四种动画形式可以总结成:

1. 透明度渐变

AlphaAnimation(float fromAlpha,float toAlpha);

这里的参数跟xml文件中的参数为对应的,(后面的也均为对应)功能跟xml文件中的保持一致。

fromAlpha:表示动画起始时的透明度;

toAlpha:表示动画结束时的透明度;

0.0表示完全透明,1.0表示完全不透明。

2. 尺寸伸缩

ScaleAnimation(float fromXScale,float toXScale,float fromYScale,float toYScale,int pivotXType,float pivotX,int pivotYType,float pivotY)

fromXScale,toXScale:起始和结束时的X坐标的伸缩;

fromYScale,toYScale:起始和结束时的Y坐标的伸缩;

pivotX:表示伸缩动画相对于X坐标的开始位置;

pivotY:表示伸缩动画相对于Y坐标的开始位置;

pivotXType:X坐标上的伸缩模式;

pivotYType:Y坐标上的伸缩模式。

3. 画面旋转

RotateAnimation(float fromDegrees,float toDegrees,int pivotXType,float pivotX,int pivotYType,float pivotY)

fromDegrees,toDegrees:起始和结束时的角度;

fromYScale,toYScale:起始和结束时的Y坐标的伸缩;

pivotX:表示伸缩动画相对于X坐标的开始位置;

pivotY:表示伸缩动画相对于Y坐标的开始位置;

pivotXType:X坐标上的伸缩模式;

pivotYType:Y坐标上的伸缩模式。

4. 位置移动

TranslateAnimation(float fromXDelta,float toXDelta,float fromYDelta,float toYDelte)

fromXDelta, fromYDelta:起始时候的坐标;

toXDelta, toYDelte:结束时候的坐标;

当然,在代码中做了这些设置后,是需要将动画播放出来的,那么播放动画的函数就为:

startAnimation(Animation animation)

animation为要播放的动画。

同时,需要设定一个播放动画的时间,利用:

setDuration(long duration)

duration为动画显示的时间,以毫秒为单位。

以上介绍的是Android平台下的Tween动画,Android平台下一共提供了两种动画,另外一种就是Frame动画。

Frame动画播放,需要有很多帧的图片。首先还是可以在XML文件中来说明。

framean.xml:

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

<animation-list xmlns:android="http://schemas.android.com/apk/res/android"

    android:oneshot="false">
    <item android:drawable="@drawable/pic1" android:duration="100" />
    <item android:drawable="@drawable/pic2" android:duration="100" />
    <item android:drawable="@drawable/pic3" android:duration="100" />
…
…
…
</animation-list>

JAVA代码:

public class GameView extends View
{
    // 定义AnimationDrawable动画对象
    private AnimationDrawable   frameAnimation    = null;
    Context                     mContext      = null;
    public GameView(Context context)
    {
       super(context);
       mContext = context;
       //定义一个ImageView用来显示动画
       ImageView myImageView = new ImageView(mContext);
       // 装载动画布局文件 
       myImageView.setBackgroundResource(R.anim.framean);   
       //构建动画
       frameAnimation = (AnimationDrawable)myImageView.getBackground();
       //设置是否循环 
       frameAnimation.setOneShot( false );  
       //设置该类显示的动画
       this.setBackgroundDrawable(frameAnimation);
    }
    public void onDraw(Canvas canvas)
    {
       super.onDraw(canvas);
    }
    public boolean onKeyUp(int keyCode, KeyEvent event)
    {
       switch ( keyCode )
       {
       case KeyEvent.KEYCODE_DPAD_UP:  
           /* 开始播放动画 */
           frameAnimation.start();
           break;
       }
       return true;
    }
}


直接用代码,而不用xml描述的方法为:

public class GameView extends View {
	// 定义AnimationDrawable动画对象
	private AnimationDrawable	frameAnimation	= null;
	Context						mContext		= null;
	//定义一个Drawable对象
	Drawable myBitAnimation = null;
	public GameView(Context context) {
		super(context);
		//实例化AnimationDrawable对象
		mContext = context;
		frameAnimation = new AnimationDrawable();
		//装载资源,循环装载需要作为动画的图片
		for(int i=1;i<=3;i++)
		{
			int id = getResources().getIdentifier("pic"+i, "drawable", mContext.getPackageName());
			myBitAnimation = getResources().getDrawable(id);
			//为动画添加一帧,参数myBitAnimation是该帧的图片,参数100是显示时间,毫秒为单位
			frameAnimation.addFrame(myBitAnimation, 100);
		}
		//设置是否循环,false表示循环
		frameAnimation.setOneShot(false);
		//设置本类将要显示这个动画
		this.setBackgroundDrawable(frameAnimation);
    public void onDraw(Canvas canvas){
    	super.onDraw(canvas);
	public boolean onKeyUp(int keyCode, KeyEvent event)
	{
		switch ( keyCode )
		{
		case KeyEvent.KEYCODE_DPAD_UP:	
			//开始播放动画 
			frameAnimation.start();
			break;
		}
		return true;
	}

}


分享到:
评论

相关推荐

    Android开发之动画实现方法

    本文实例讲述了Android开发之动画实现方法。分享给大家供大家参考。具体分析如下: 动画分为三种: 逐帧动画、布局动画和控件动画 控件动画实现 通过重写Animation的 applyTransformation (float interpolatedTime, ...

    androidOpenGL实现3d动画

    这是用androidOpenGL 实现的3D 动画 导入工程即可运行。

    android气泡动画实现

    在Android开发中,动画是提升用户体验的关键因素之一。"android气泡动画实现"是指在Android应用中创建一种独特的视觉效果,即用户点击屏幕任意位置后,该位置会呈现出气泡爆炸的效果。这种动画通常用于吸引用户的...

    Android学习之Android 5.0分享动画实现微信点击全屏效果

    在Android开发中,实现丰富的用户交互和视觉效果是提升应用体验的关键之一。本文将深入探讨如何在Android 5.0及以上版本中实现类似微信的点击分享动画,即当用户点击分享按钮时,整个屏幕会充满动画效果。我们将通过...

    Android 抖动动画效果

    在Android开发中,动画是提升用户体验的关键元素之一。"Android 抖动动画效果"是一种常见的交互反馈机制,常用于向用户指示输入错误或提示注意某些信息。本篇将深入探讨如何实现这种效果,并讨论其在不同场景中的...

    Android 游戏开发之Tween动画的实现

    在Android游戏开发中,Tween动画是一种非常常见的动画形式,它主要用于实现对象的平滑移动、缩放、旋转等效果。Tween动画,源自于图形设计领域,意为“时间插值”,在Android中,它是通过`android.animation....

    Android属性动画实现酷炫登录界面

    本文将深入探讨如何使用属性动画实现一个酷炫的登录界面,以响应群友分享的登录原型图。 首先,让我们了解什么是属性动画。在Android 3.0及以上版本引入的属性动画系统,不同于早期的视图动画(View Animation),...

    android实现点赞动画

    在Android应用开发中,为了提升用户体验,经常需要添加各种丰富的动画效果。点赞动画就是其中一种常见且有趣的交互设计,它可以增强用户与应用的互动性,让应用更具吸引力。本篇文章将详细探讨如何在Android平台上...

    Android翻页动画效果完整实例代码

    在Android开发中,实现引人入胜的用户体验是至关重要的,而翻页动画效果就是其中一种可以提升用户交互感的视觉技巧。本实例代码着重展示了如何在Android平台上创建逼真的翻页动画,使得应用程序看起来更加生动有趣。...

    Android属性动画的实现(JAVA和XML)

    在Android开发中,属性动画(Property Animation)是一个强大的工具,用于创建丰富的动态效果。相比于旧式的视图动画(View Animation),属性动画系统允许开发者对对象的属性进行改变,并且这些改变能够在帧之间...

    Android 游戏开发之使用AnimationDrable实现Frame动画

    在选择合适的动画实现方式时,开发者应考虑性能、兼容性以及需求的复杂性。 通过阅读“Android 游戏开发之使用AnimationDrable实现Frame动画”相关资料,你可以深入理解`AnimationDrawable`的工作原理,并学习如何...

    Android使用ViewFlipper实现Switch动画特效。

    在Android开发中,ViewFlipper是一个非常有用的布局组件,它允许开发者轻松地在多个视图之间切换,并且可以添加各种动画效果,使用户界面更加生动和互动。本篇将深入探讨如何利用ViewFlipper实现Switch动画特效,...

    Android动画效果--渐变动画

    在Android开发中,动画效果是提升用户体验的关键因素之一。渐变动画是Android动画体系中的一种基本类型,它可以为用户界面带来生动和动态的感觉。本文将深入探讨四种主要的渐变动画:Alpha(透明度)、Scale(缩放)...

    Android中使用SVG实现炫酷动画效果

    在Android开发中,SVG(Scalable Vector Graphics)是一种用于绘制矢量图形的XML格式,它允许开发者创建高质量、可缩放的图像,且在不同分辨率的设备上表现一致。相较于传统的位图图像(如PNG或JPEG),SVG具有更小...

    android开发中实用超炫的动画

    这里我们将深入探讨Android Studio中的动画实现方法,以及如何利用这些技术来优化你的应用。 首先,Android提供了两种主要的动画类型:属性动画(Property Animation)和视图动画(View Animation)。属性动画系统...

    android Animation动画实现loading效果

    在Android开发中,动画(Animation)是提升用户体验和视觉效果的重要工具之一,特别是在创建加载(Loading)效果时。本文将深入探讨如何使用Android Animation来实现动态的Loading效果。 一、Android Animation概述 ...

    Android录音的声波动画

    在Android开发中,创建一个能够显示声波动画的录音应用是一项有趣的挑战,它结合了多媒体处理、用户界面设计以及实时数据可视化。以下是对这个"Android录音的声波动画"项目的关键知识点的详细解释: 1. **Android ...

    Android-一个用于Android的轻量级粒子动画库

    标签"Android开发-动画效果"进一步确认了这个库专注于Android平台的动画实现。在Android中,动画分为两种主要类型:属性动画(Property Animation)和视图动画(View Animation)。粒子动画库可能是基于属性动画系统...

    【Android】Android开发之常用的loading等待效果实现,仿微博等待动画。两种实现方式详解

    博文介绍:http://blog.csdn.net/qq_21376985/article/details/52847317 【Android】Android开发之常用的loading等待效果实现,仿微博等待动画。两种实现方式详解

Global site tag (gtag.js) - Google Analytics