android动画详解(一)

一般常用的android动画有View Animation(视图动画)和Property Animation(属性动画)。灵活运用android提供的这些动画我们能够做出绚丽的动画效果。

View Animation

在安卓的官方文档中是这么定义视图动画的:View Animation is the older system and can only be used for Views. It is relatively easy to setup and offers enough capabilities to meet many application’s needs.这句话告诉了我们View Animation只能应用于Views视图中。如果想对非View执行动画, you have to implement your own code to do so.它仅仅公开了
• 透明度变化(AlphaAnimation)
• 缩放(ScaleAnimation)
• 位移(TranslateAnimation)
• 旋转(RotateAnimation)
这四个动画。
下面就将一个个的来学习这四个不同的动画。

Translate Animation

位移动画,顾名思义,它是来操纵View的平行移动的动画。我们可以通过XML和代码这两种方式来实现这个动画效果。动画定义文件应该存放在 res/anim 文件夹下,访问时采用 R.anim.XXX.xml 的方式。
由于使用XML这种方式来实现动画更加的方便快捷,所以我们一般选用这种方式来实现View Animation。
首先我们创建一个名为transltate.xml的文件。

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromXDelta="0"
    android:fromYDelta="0"
    android:toXDelta="200"
    android:toYDelta="200">
</translate>

android:fromXDelta=”0” 表示X的起始值,这里的值是相对于我们将要执行动画的view的。
android:toXDelta=”200” 表示X的结束值
然后再代码中点击按钮实现启动动画:

  final Animation translate = AnimationUtils.loadAnimation(this, R.anim.translate);
  translate.setDuration(1000);
  translate.setFillAfter(true);
  sample.startAnimation(translate);

动画效果如下:
这里写图片描述
这里点击sample会有一个Toast弹出,表示被点中了,可是从视频的点击事件看出,当执行完位移动画后,点击sample将没有弹窗了,相反点击sample位移前的空白位置却有Toast弹出,这就说明了再View Animation中,动画并没有改变View的真实位置。

Alpha Animation

透明度动画,它可以改变View的透明度。
仍然在anmi文件夹下创建alpha.xml文件

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

这里面的内容很简单
android:fromAlpha=”1” 代表View的起始透明度
android:toAlpha=”0” 代表View的结束时透明度
在代码中的调用过程与位移动画完全一致,这里就不在赘述。
动画执行效果如下:
这里写图片描述

Rotate Animation

旋转动画,使View产生旋转的效果。

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="0"
    android:toDegrees="180"
    android:pivotX="50%"
    android:pivotY="50%"
    >
</rotate>

android:fromDegrees=”0” 旋转的起始角度
android:toDegrees=”180” 旋转的结束角度
android:pivotX=”50%” 旋转的轴点的X轴坐标,可以用百分比表示
android:pivotY=”50%” 旋转的轴点的Y轴坐标
动画的执行效果如下:
这里写图片描述

Scale Animation

缩放动画,使View能实现放大和缩小的效果,

<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromXScale="1"
    android:toXScale="1.5"
    android:fromYScale="1"
    android:toYScale="1.5"
    android:pivotX="50%"
    android:pivotY="50%"
    >
</scale>

android:fromXScale=”1” 水平方向缩放的起始值
android:toXScale=”1.5” 水平方向缩放的结束值
android:fromYScale=”1” 竖直方向缩放的起始值
android:toYScale=”1.5” 竖直方向缩放的结束值
android:pivotX=”50%” 缩放轴点的X坐标
android:pivotY=”50%” 缩放轴点的Y坐标
动画执行效果如下:
这里写图片描述


视图动画中的四种最基本用法已经介绍完毕,使用起来还是很简单方便的。
出了上面介绍的属性外,视图动画还有一些常用的属性,如下所示:
android:duration 动画的持续时间
android:fillAfter 动画结束以后View是否停留在结束位置,true表示停留在结束位置,false表示不停留同时也是默认值。


LayoutAnimation

出了这四种形式外,View动画还可以实现一些特殊的场景,比如在ViewGroup中可以控制子元素的出场动画。一般在ListView中通过定义LayoutAnimation来实现。
-首先anim文件夹中定义LayoutAnimation

<?xml version="1.0" encoding="utf-8"?>
<layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"
    android:delay="0.5"
    android:animationOrder="normal"
    android:animation="@anim/left_side_anim"
    >
</layoutAnimation>

android:delay=”0.5” 这个属性表示每一个条目延迟执行的时间,假设动画执行时间设置为100ms,则第一个条目将在150ms时执行动画,以此类推,第二条目将在200ms时执行动画。
android:animationOrder=”normal” 这个是动画执行的模式,有normal、reverse、random,依次是顺序执行、逆序执行和随机执行
android:animation=”@anim/left_side_anim” 这个属性设置的是执行什么样的动画,事例代码如下

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="500">
<translate android:fromXDelta="-50%" android:toXDelta="0"></translate>
<alpha android:fromAlpha="0.0" android:toAlpha="1.0"></alpha>
</set>

这段代码相信很容易理解,就是执行了平移和透明度动画,然后将listview显示出来即可:

final ListView listView = (ListView) findViewById(R.id.lv);
listView.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,Cheeses.NAMES));

动画效果如下:
这里写图片描述

总结

视图动画虽然能实现一些基本的动画效果,但是这些仍然远远不够,所以Google在android3.0中加入了属性动画。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值