前Android物业动画研究(Property Animation)全然解析具体解释上已经基本展示了属性动画的核心使用方法:
ObjectAnimator实现动画,ValueAnimator实现动画,AnimatorSet的使用等~
当然了属性动画另一部分的知识点,也能做出非常不错的效果,将在本篇博客为您展示~
1、怎样使用xml文件来创建属性动画
大家肯定都清楚,View Animator 、Drawable Animator都能够在anim目录下创建动画,然后在程序中使用,甚至在Theme中设置为属性值。当然了。属性动画事实上也能够在文件里声明:
首先在res下建立animator目录。然后建立res/animator/scalex.xml
1
2
3
4
5
6
7
8
|
<?xml
version="1.0"
encoding="utf-8"?
>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000"
android:propertyName="scaleX"
android:valueFrom="1.0"
android:valueTo="2.0"
android:valueType="floatType"
>
</objectAnimator>
|
代码:
使用AnimatorInflater载入动画的资源文件,然后设置目标,就ok~~是不是非常easy,这仅仅是单纯横向的放大一倍~
假设我希望纵向与横向同一时候缩放呢?则能够怎么定义属性文件:
使用set标签,有一个orderring属性设置为together,【还有还有一个值:sequentially(表示一个接一个运行)】。
上篇博客中忽略了一个效果。就是缩放、反转等都有中心点或者轴,默认中心缩放,和中间对称线为反转线。所以我决定这个横向,纵向缩小以左上角为中心点:
代码:
非常easy。直接给View设置pivotX和pivotY,然后调用一下invalidate,就ok了。
以下看效果图:
好了,通过写xml声明动画,使用set嵌套set。结合orderring属性,也基本能够实现不论什么动画~~上面也演示了pivot的设置。
2、布局动画(Layout Animations)
主要使用LayoutTransition为布局的容器设置动画。当容器中的视图层次发生变化时存在过渡的动画效果。
基本代码为:
过渡的类型一共同拥有四种:
LayoutTransition.APPEARING 当一个View在ViewGroup中出现时。对此View设置的动画
LayoutTransition.CHANGE_APPEARING 当一个View在ViewGroup中出现时。对此View对其它View位置造成影响。对其它View设置的动画
LayoutTransition.DISAPPEARING 当一个View在ViewGroup中消失时,对此View设置的动画
LayoutTransition.CHANGE_DISAPPEARING 当一个View在ViewGroup中消失时,对此View对其它View位置造成影响,对其它View设置的动画
LayoutTransition.CHANGE 不是因为View出现或消失造成对其它View位置造成影响,然后对其它View设置的动画。
注意动画究竟设置在谁身上,此View还是其它View。
好了以下看一个综合的样例:
布局文件:
代码:
效果图:
动画有点长,耐心点看,一定要注意,是对当前View还是其它Views设置的动画。
当然了动画支持自己定义,还支持设置时间,比方我们改动下,加入的动画为:
则效果为:
原本的淡入,变成了宽度从中间放大的效果~~是不是还不错~~
3、View的anim方法
在SDK11的时候。给View加入了animate方法,更加方便的实现动画效果。
布局文件:
代码:
简单的使用mBlueBall.animate().alpha(0).y(mScreenHeight / 2).setDuration(1000).start()就能实现动画~~只是须要SDK11,此后在SDK12,SDK16又分别加入了withStartAction和withEndAction用于在动画前。和动画后运行一些操作。当然也能够.setListener(listener)等操作。
使用ObjectAnimator实现上面的变化,我们能够使用:PropertyValueHolder
效果与上面一样。
执行结果:
好了,关于属性动画基本全部的使用方法到此结束~~~~欢迎大家一起学习,一起进步。
源代码下载:zhy_property_animation
版权声明:本文博客原创文章,博客,未经同意,不得转载。