Animation分为:
1.Tween Animation 补间动画
2.Frame Animation 帧动画
不管补间动画还是帧动画,都可以通过java代码或者xml文件来描述,然后自然是使用java代码来使用动画(赋给控件、开始、停止等)。一般使用xml文件描述方式,便于维护。
动画的描述最终都是通过实例化为Animation或者AnimationDrawable这两个类。而具体就是关于实例化这两个类的种种方式了。获得Animation实例的方式:
XML配置方式:
当然,虽说是Xml方式,实际上是xml和java代码结合的方式,只不过动画的部分使用xml描述,一般java代码使用AnimationUtils类的静态方法loadAnimation即可实例化一个动画。比如:
Animation alphaAnima = AnimationUtils.loadAnimation(MainActivity.this, R.anim.alpha); alphaAnima.setFillAfter(true); areaTxv.setAnimation(alphaAnima);至于配置文件,就是上面的那个R.anim.alpha,先在res下创建一个名为anim的文件夹,在anim文件夹下创建一个名为alpha的xml文件,下面就讲xml文件的内容。
xml文件又分为
先讲讲配置文件中的几个重要的参数,
fromXDelta:可以有三种格式表示,"70%"表示相对于控件本身正X轴方向70%的位置,"70%p"表示在父控件正X轴方向70%的位置,"70.6"表示相对于控件本身在正X轴上的坐标70.6。负数及toXDelta,fromYDelta等几个参数与其类似。
fromAlpha:浮点型,0表示完全透明,1表示完全不透明
fromDegrees:浮点型,动画开始时的角度。任意浮点值,可正可负,可大于360。45表示顺时针方向45度,-270表示逆时针方向270度。
pivotX:浮点型或百分比,表示旋转中心的X轴坐标,该值相对于控件自身坐标。30表示在控件正X轴30个像素的地方,25%表示在控件正X轴25%的地方。跟pivotX一样,默认是0(控件原点)。
fromXScale:浮点型,动画开始时,x轴方向相对于控件本身的缩放长度,1.0代表和控件一样,0.3代表0.3倍,2代表2倍。
fillAfter:布尔型,true表示动画结束时,保持控件的显示。
fillBefore:布尔型,表示动画开始前,是否显示控件。在立即执行的动画里,看不出什么不一样,但在延时开始的动画里,会看到在动画执行前,会先绘制显示该控件。
该设置只在链式动画中生效(chain animations),对单个控件动画不会生效。
默认true(fillEnabled未设为true的前提下)
fillEnabled:布尔型,这个跟fillBefore都没在chain animations中试过,暂时都不大清楚真正的效果,在单个动画里设和不设好像都一样。到后面如果试了chain animations再补充吧
startOffset:毫秒值,动画开始的时间。
interpolator:插补资源。它指定一个应用与动画的插补器。这个值必须引用特定的插补器资源(不是插补器类名)。
可以利用来自平台的默认的插补器资源,也能够创建自己的插补器资源。
shareInterpolator:布尔值,如果要在所有的子元素中共享插补器,就要设置为”true”。
注意:动画移动的只是控件的视觉效果,控件本身并没有移动,包括点击的区域等属性都将保持在原先的地方。所以动画开始时都是从(0,0)位置开始执行,不管之前有没有动画将原先的控件移到别的地方。如果要接着上一个动画执行下一个动画,应该用一个连续的动画一次性完成,或者考虑其它方式实现动画(这里与animation对象有没有关系,能不能加以使用?这个没有深入测试,但animation对象好像并未提供更多的方法,有没有子类或者其它高级的东西,还望各位给予补充)。另外,在一个动画结束后,会刷一下该控件的视图,之前的那些旧动画的视图会被清除。
具体例子如下:
a.位移动画:
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromYDelta="-100%p" android:toYDelta="0" android:duration="200"/> </set>b.渐变:
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <alpha android:fromAlpha="0" android:toAlpha="1" android:duration="500"/> </set>
c.旋转:
(围绕控件的中心逆时针旋转45度)
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <rotate android:fromDegrees="0" android:toDegrees="-45" android:pivotX="50%" android:pivotY="50%" android:duration="3000"/> </set>d.缩放
前四个参数必须都有,当然,正常使用的话duration也是要有的
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <scale android:fromXScale="0.3" android:toXScale="2" android:fromYScale="1" android:toYScale="3" android:pivotX="50%" android:pivotY="0.9" android:duration="1000"/> </set>
代码方式:
和xml文件方式类似,只是xml的动画描述在java代码里编写,动画加载、使用方式和上面的xml方式一样。
只需要在创建Animation实例的时候new 它的子类就可以了。比如:AlphaAnimation、ScaleAnimation、TranslateAnimation、RotateAnimation等。在构造器中传入那些本必须在xml文件中设置的参数。
Aniamtion animation_Scale =new ScaleAnimation(0.0f, 1.4f, 0.0f, 1.4f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
代码下载:
http://download.csdn.net/detail/wzg_1987/5474453
http://blog.csdn.net/fireofstar/article/details/7471982