Android动画特效的实现

Android平台支持4种类型的图画动画:

GIF图像:动画GIF是独立的动画文件,包含多帧;

逐帧动画(Frame-by-frameanimation):Android SDK提供了一种逐帧动画机制,开发人员只需提供各个图形帧,就能在他们之间切换;

渐变动画(Tweened animation):渐变动画提供了一种简单而灵活的方法,让您能够定义可用于任何试图或不惧的动画操作,这是最常用的一种;

OpenGL ES:Android OpenGL ES API提供了高级三维绘画、动画、光照和纹理功能。

由于渐变动画应用比较广泛,在这里我们只讲通过以编程方式创建简便序列,实现渐变动画:


每一个渐变动画都必须有独立的XML文件存储于/res/anim中,但是都一个动画可用于应用程序中的任何视图控件。您还可以利用内置的动画资源,他们是有android.R.anim类提供的。

下面的代码实现的是让目标在2500毫秒(2.5秒)内透明度从0(透明)逐渐增加到1(不透明):

       <?xml version="1.0" encoding="utf-8"?>
	<set xmlns:android="http://schemas.android.com/apk/res/android">
       <alpha
          android:fromAlpha="0.0"
          android:toAlpha="1.0"
          android:duration="2500"/>
	</set>


下面的代码与上面的完全相同,知识将属性startOffset设置为2500(毫秒),这意味着这个动画总共需要5秒钟:等待2.5秒后再播放2.5秒:

       <?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
       <alpha
          android:fromAlpha="0.0"
          android:toAlpha="1.0"
          android:duration="2500"
              android:startOffset="2500"/>
</set>


上面的两个XML可以应用于除布局控件外的任何控件中,但是如果我们要用于一个布局空间中所有的子控件,应该如何写呢?下面的代码实现了目标的旋转、缩放和透明度的变化:

 <?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
       <rotate
          android:fromDegrees="0"
          android:toDegrees="360"
          android:pivotX="50%"
          android:pivotY="50%"
          android:duration="2000"/>
       <alpha
          android:fromAlpha="0.0"
          android:toAlpha="1.0"
          android:duration="2000"/>
       <scale
          android:pivotX="50%"
          android:pivotY="50%"
          android:fromXScale="0.1"
          android:toXScale="1.0"
          android:fromYScale="0.1"
          android:toYScale="1.0"
          android:duration="2000"/>
</set>

下面是对以上代码中每一个属性的解释:

fromXScale起始时x坐标的尺寸,设置为1.0说明是整个图片x轴的长度
toXScale 结束时x坐标的尺寸,设置为0.0说明整个图片x轴完全收缩到无
fromYScale 起始时y坐标的尺寸,设置为1.0说明是整个图片y轴的长度
toYScale 结束时y坐标的尺寸,设置为1.0说明是在收缩时y轴的长度保持不变
那么他们的变化都是先对于某一点来变化的,因此pivotX和pivotY就是确定这个点的位置。
在一个数轴上(原点为图片的左上角,x轴和y轴的射线分别是向右和向下,我测试过)
pivotX="50%"说明是以图片本身的一半作为x轴的坐标;
pivotY="50%"说明是以图片本身的一半作为y轴的坐标;
所以圆心点的坐标就是(0.5x,0.5y)。(x y是原图片的长和高)
duration是设置的动画执行时间

startOffset是设置的动画执行前停顿的时间

其中alpha还有一个属性叫做Interpolator,它用来指定动画的变化速度,一共有以下一种模式:

——AccelerateInterpolator:动画从开始到结束,变化率是一个加速的过程。
——DecelerateInterpolator:动画从开始到结束,变化率是一个减速的过程。
——CycleInterpolator:动画从开始到结束,变化率是循环给定次数的正弦曲线。
——AccelerateDecelerateInterpolator:动画从开始到结束,变化率是先加速后减速的过程。
——LinearInterpolator:动画从开始到结束,变化率是线性变化。

看完解释之后,我们再看一个例子以便深化理解,这是一个伸展的效果的配置文件:

<?xml version="1.0"encoding="utf-8"?>
<set android:interpolator="@android:anim/accelerate_interpolator">
        <scale
             android:fromXScale="0.0"
             android:toXScale="1.0"
             android:fromYScale="1.0"
             android:toYScale="1.0"
             android:pivotX="50%"
             android:pivotY="50%"
             android:duration="150"/>
</set>

下面的工作就是把我们制作的动画效果绑定在控件中了,有两种方法:

1、将动画效果用于特定视图:

textView1 =(TextView)findViewById(R.id.textView1);

textView2 =(TextView)findViewById(R.id.textView2);

//将动画效果绑定在控件上

Animation animation =AnimationUtils.loadAnimation(this, R.anim.fade_in);

textView1.setAnimation(animation);

textView2.setAnimation(AnimationUtils.loadAnimation(this,R.anim.fade_in_long));

2、将动画效果用于布局中的所有视图

//将动画效果用于布局中的所有视图

tableLayout =(TableLayout)findViewById(R.id.tableLayout);

LayoutAnimationControllerlayoutAnimationController =newLayoutAnimationController(AnimationUtils.loadAnimation(this,R.anim.custom_anim));

for (int i = 0; i< tableLayout.getChildCount(); i++)

{

TableRow tableRow =(TableRow)tableLayout.getChildAt(i);

tableRow.setLayoutAnimation(layoutAnimationController);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值