android动画

动画效果编程基础--Animation

Android 平台提供了一套完整的动画框架,使得开发者可以用它来开发各种动画效果。Android 平台提供了两类动画,一类是 Tween 动画,即通过对场景里的对象不断做图像变换 平移、缩放、旋转 产生动画效果;第二类是 Frame 动画,即顺序播放事先做好的图像,跟电影类似。本文是由两部分组成的有关 Android 动画框架详解的第一部分原理篇, 主要分析 Tween 动画的实现原理, 最后简单介绍在 Android 中如何通过播放 Gif 文件来实现动画。我们先看一下动画示例来一点感性认识。

Android 动画类型
Android的animation由四种类型组成

XML中 

alpha

渐变透明度动画效果

scale

渐变尺寸伸缩动画效果

translate

画面转换位置移动动画效果

rotate

画面转移旋转动画效果

JavaCode中 

AlphaAnimation

渐变透明度动画效果

ScaleAnimation

渐变尺寸伸缩动画效果

TranslateAnimation

画面转换位置移动动画效果

RotateAnimation

画面转移旋转动画效果

Android动画模式

Animation主要有两种动画模式:

一种是tweened animation(渐变动画) 

XML中

JavaCode

alpha

AlphaAnimation

scale

ScaleAnimation

一种是frame by frame(画面转换动画) 

XML中

JavaCode

translate

TranslateAnimation

rotate

RotateAnimation

动画的类型

Xml定义动画使用的配置节点

编码定义动画使用的类

渐变透明度动画效果

<alpha/> 

AlphaAnimation

渐变尺寸缩放动画效果

<scale/> 

ScaleAnimation

画面位置移动动画效果

<translate/> 

TranslateAnimation

画面旋转动画效果

<rotate/>

RotateAnimation

如何使用XML中的动画效果

public static Animation loadAnimation (Context context, int id) 

//第一个参数Context为程序的上下文    

//第二个参数id为动画XML文件的引用

//例子:

myAnimation= AnimationUtils.loadAnimation(this,R.anim.my_action);

//使用AnimationUtils类的静态方法loadAnimation()来加载XML中的动画XML文件

如何在Java代码中定义动画

//在代码中定义 动画实例对象

private Animation myAnimation_Alpha;

private Animation myAnimation_Scale;

private Animation myAnimation_Translate;

private Animation myAnimation_Rotate;

    

//根据各自的构造方法来初始化一个实例对象

myAnimation_Alpha=new AlphaAnimation(0.1f, 1.0f);

myAnimation_Scale =new ScaleAnimation(0.0f, 1.4f, 0.0f, 1.4f,

      Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);

myAnimation_Translate=new TranslateAnimation(30.0f, -80.0f, 30.0f, 300.0f);

myAnimation_Rotate=new RotateAnimation(0.0f, +350.0f,

       Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF, 0.5f);

Android动画解析—JavaCode

AlphaAnimation

① AlphaAnimation类对象定义 

private AlphaAnimation myAnimation_Alpha;

② AlphaAnimation类对象构造 

AlphaAnimation(float fromAlpha, float toAlpha) 

//第一个参数fromAlpha为 动画开始时候透明度

//第二个参数toAlpha为 动画结束时候透明度

myAnimation_Alpha=new AlphaAnimation(0.1f, 1.0f);

//说明: 

//                0.0表示完全透明

//                1.0表示完全不透明

③ 设置动画持续时间 

myAnimation_Alpha.setDuration(5000);

//设置时间持续时间为 5000毫秒

ScaleAnimation

① ScaleAnimation类对象定义 

private AlphaAnimation myAnimation_Alpha;

② ScaleAnimation类对象构造 

ScaleAnimation(float fromX, float toX, float fromY, float toY,

           int pivotXType, float pivotXValue, int pivotYType, float pivotYValue) 

//第一个参数fromX为动画起始时 X坐标上的伸缩尺寸    

//第二个参数toX为动画结束时 X坐标上的伸缩尺寸     

//第三个参数fromY为动画起始时Y坐标上的伸缩尺寸    

//第四个参数toY为动画结束时Y坐标上的伸缩尺寸  

/*说明:

                    以上四种属性值    

                    0.0表示收缩到没有 

                    1.0表示正常无伸缩     

                    值小于1.0表示收缩  

                    值大于1.0表示放大

*/

//第五个参数pivotXType为动画在X轴相对于物件位置类型  

//第六个参数pivotXValue为动画相对于物件的X坐标的开始位置

//第七个参数pivotXType为动画在Y轴相对于物件位置类型   

//第八个参数pivotYValue为动画相对于物件的Y坐标的开始位置

myAnimation_Scale =new ScaleAnimation(0.0f, 1.4f, 0.0f, 1.4f,

             Animation.RELATIVE_TO_SELF, 0.5f, 

             Animation.RELATIVE_TO_SELF, 0.5f);

③ 设置动画持续时间 

myAnimation_Scale.setDuration(700);

//设置时间持续时间为 700毫秒

TranslateAnimation

① TranslateAnimation类对象定义 

private AlphaAnimation myAnimation_Alpha;

② TranslateAnimation类对象构造 

TranslateAnimation(float fromXDelta, float toXDelta,

                       float fromYDelta, float toYDelta) 

//第一个参数fromXDelta为动画起始时 X坐标上的移动位置    

//第二个参数toXDelta为动画结束时 X坐标上的移动位置      

//第三个参数fromYDelta为动画起始时Y坐标上的移动位置     

③ 设置动画持续时间 

myAnimation_Translate.setDuration(2000);

//设置时间持续时间为 2000毫秒

RotateAnimation

① RotateAnimation类对象定义

private AlphaAnimation myAnimation_Alpha;

② RotateAnimation类对象构造

RotateAnimation(float fromDegrees, float toDegrees, 

            int pivotXType, float pivotXValue, 

            int pivotYType, float pivotYValue)

//第一个参数fromDegrees为动画起始时的旋转角度    

//第二个参数toDegrees为动画旋转到的角度   

//第三个参数pivotXType为动画在X轴相对于物件位置类型  

//第四个参数pivotXValue为动画相对于物件的X坐标的开始位置

//第五个参数pivotXType为动画在Y轴相对于物件位置类型   

//第六个参数pivotYValue为动画相对于物件的Y坐标的开始位置

myAnimation_Rotate=new RotateAnimation(0.0f, +350.0f,

              Animation.RELATIVE_TO_SELF,0.5f,

              Animation.RELATIVE_TO_SELF, 0.5f);

③ 设置动画持续时间

myAnimation_Rotate.setDuration(3000);

//设置时间持续时间为 3000毫秒

如何使用Java代码中的动画效果

使用从View父类继承过来的方法startAnimation()来为View或是子类View等等添加一个动画效果

public void startAnimation (Animation animation) 

Activity过渡动画与页面切换动画

页面切换动画

利用ViewFlipper实现屏幕切换动画

基础:

屏幕切换指的是在同一个Activity内屏幕见的切换,最长见的情况就是在一个FrameLayout内有多个页面,比如一个系统设置页面;一个个性化设置页面。

通过查看API文档可以发现,有个android.widget.ViewAnimator类继承至FrameLayoutViewAnimator类的作用是为FrameLayout里面的View切换提供动画效果。

该类有如下几个和动画相关的函数: 

l setInAnimation:设置View进入屏幕时候使用的动画,该函数有两个版本,一个接受单个参数,类型为android.view.animation.Animation;一个接受两个参数,类型为Contextint,分别为Context对象和定义AnimationresourceID。  

l setOutAnimation: 设置View退出屏幕时候使用的动画,参数setInAnimation函数一样。 

l showNext: 调用该函数来显示FrameLayout里面的下一个View。 

l showPrevious: 调用该函数来显示FrameLayout里面的上一个View。 

 

一般不直接使用ViewAnimator而是使用它的两个子类ViewFlipperViewSwitcherViewFlipper可以用来指定FrameLayout内多个View之间的切换效果,可以一次指定也可以每次切换的时候都指定单独的效果。

该类额外提供了如下几个函数:  

l isFlipping: 用来判断View切换是否正在进行 

l setFilpInterval:设置View之间切换的时间间隔 

l startFlipping:使用上面设置的时间间隔来开始切换所有的View,切换会循环进行 

l stopFlipping: 停止View切换 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值