Android动画AnimationSet遇到的问题。

  之前对Android动画这块一直是一知半解,知道个大概,并不会使用。刚好这几天没有太多的任务要做,可以梳理一下Android动画的一些知识。Android Animation的基础用法就不说了,这里主要记录下简单实用中遇到的问题。

1.XML中AnimationSet的某些属性有些问题。

  主要就是android:repeatCount,android:repeatMode无效。这个问题据说是Google的工程师刻意为之。【参考:http://stackoverflow.com/questions/4480652/android-animation-does-not-repeat】。

不过也有一些补救措施,比如可以给Animation设置AnimationListener。然后在onAnimationEnd()方法中,重新开始一遍动画即可。

2.AnimationSet的动画添加顺序问题。

  由于AnimationSet的addAnimation()方法添加的动画会按照添加动画的顺序进行矩阵变化等等处理,所以假设有一系列的动画(不只有一个变换位置的动画)作用于A上使得A转换成了B,那么如果想通过另外一系列动画使得B还转换成之前的A,最好保证前后两次转换的动画的顺序相同。比如图片image先后经过动画:a,b,c变换成image2,如果想再从image2变换成image,那么动画的顺序也需要a,b,c(当然这个前提是要有多个可能产生位置变化的动画)

举个例子:在XML中定义动画:先ronate、然后alpha、接着scale,最后translate。

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:re
    >

    <rotate
        android:duration="3000"
        android:fromDegrees="0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toDegrees="360" >
    </rotate>
    <alpha
        android:duration="3000"
        android:fromAlpha="1.0"
        android:startOffset="0"
        android:toAlpha="0.5" />

    <scale
        android:duration="3000"
        android:fromXScale="1.0"
        android:fromYScale="1.0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="4"
        android:toYScale="4" >
    </scale>
    <translate
        android:duration="3000"
        android:fromXDelta="0"
        android:fromYDelta="0"
        android:toXDelta="-100"
        android:toYDelta="-800" >
    </translate>

</set>

  如果需要在把动画还原,需要:

AlphaAnimation alphaAnimation = new AlphaAnimation(0.5f, 1.0f);
RotateAnimation rotateAnimation = new RotateAnimation(360f, 0f,
				                Animation.RELATIVE_TO_SELF, 0.5f,
						Animation.RELATIVE_TO_SELF, 0.5f);
ScaleAnimation scaleAnimation = new ScaleAnimation(4.0f, 1.0f,
						4.0f, 1.0f, Animation.RELATIVE_TO_SELF, 0.5f,
						Animation.RELATIVE_TO_SELF, 0.5f);
TranslateAnimation translateAnimation = new TranslateAnimation(
						Animation.ABSOLUTE, -100,
						Animation.ABSOLUTE, 0,
						Animation.ABSOLUTE, -800,
						Animation.ABSOLUTE, 0);
AnimationSet set = new AnimationSet( true);
set.setInterpolator(new AccelerateDecelerateInterpolator());
set.addAnimation(alphaAnimation);
set.addAnimation(scaleAnimation);
set.addAnimation(rotateAnimation);
set.addAnimation(translateAnimation);
set.setDuration(3000);

不然就有可能在转换的过程中,动画不流畅,出现闪动的现象。  

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。