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中加入了属性动画。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,658评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,482评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,213评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,395评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,487评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,523评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,525评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,300评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,753评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,048评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,223评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,905评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,541评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,168评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,417评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,094评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,088评论 2 352

推荐阅读更多精彩内容