7.1 View动画
View动画的作用对象是View,共有四种动画效果:平移(Translate),缩放(Scale),旋转(Rotate),透明度(Alpha)。
7.1.1 View动画的种类
View动画的保存路径:res/anim/filename.xml。XML格式语法如下:
<?xml version="1.0" encoding="utf-8" ?><set xmlns:android="http://schemas.android.com/apk/res/android"android:interpolator="@anim/interpolator_resource"android:shareInterpolator="true|false"><alphaandroid:fromAlpha="float"<!-- 透明度起始值-->android:toAlpha="float"/><!-- 透明度结束值--><scaleandroid:fromXScale="float"<!--水平方向缩放起始值 -->android:toXScale="float"<!--水平方向缩放结束值 -->android:fromYScale="float"<!--垂直方向缩放起始值 -->android:toYScale="float"<!--垂直方向缩放结束值 -->android:pivotX="float"<!--缩放轴点x坐标 -->android:pivotY="float"/><!--缩放轴点y坐标 --><translateandroid:fromXDelta="float"<!--x的起始位置-->android:fromYDelta="float"<!--y的起始位置-->android:toXDelta="float"<!--x的结束位置-->android:toYDelta="float"/><!--y的结束位置--><rotateandroid:fromDegrees="float"<!--起始角度 -->android:toDegrees="float"<!-- 结束角度-->android:pivotX="float"<!-- 旋转轴点x坐标 -->android:pivotY="float"/><!-- 旋转轴点y坐标--><set>...</set></set><set>标签表示动画集合,对应AnimationSet类,内部还可以嵌套其他动画集合。
Animation animation = AnimationUtils.loadAnimation(this, R.anim.view1);button.startAnimation(animation);使用Animation的setAnimationListener方法可以给View动画添加监听。
<?xml version="1.0" encoding="utf-8" ?><animation-list xmlns:android="http://schemas.android.com/apk/res/android"android:oneshot="true|false"><item android:drawable="@mipmap/ic_launcher" android:duration="500"/><item android:drawable="@mipmap/ic_launcher" android:duration="500"/><item android:drawable="@mipmap/ic_launcher" android:duration="500"/></animation-list>使用时直接作为View的背景并通过Drawable来播放即可。
button.setBackgroundResource(R.drawable.view2);AnimationDrawable drawable=(AnimationDrawable)button.getBackground();drawable.start();7.2 View动画的特殊使用场景
<?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/anim_item"/>android:delay 子元素开始动画的时间延迟,例如子元素设置duration为200ms,则0.5表示每个子元素都需要延迟100ms开能开始播放动画,即第一个经过100ms开始播放,第二个就得经过200ms开始播放,第三个就得经过300ms开始播放,以此类推。
<?xml version="1.0" encoding="utf-8" ?><set xmlns:android="http://schemas.android.com/apk/res/android"android:duration="300"android:interpolator="@android:anim/accelerate_interpolator"android:shareInterpolator="true"><alphaandroid:fromAlpha="0.0"android:toAlpha="1.0" /><translateandroid:fromXDelta="500"android:toYDelta="0" /></set>(3)为ViewGroup指定android:layoutAnimation属性
android:layoutAnimation="@anim/anim_layout"或者通过LayoutAnimationController来为ViewGroup指定动画。
Animation animation = AnimationUtils.loadAnimation(this, R.anim.anim_item);LayoutAnimationController controller=new LayoutAnimationController(animation);controller.setDelay(0.5f);controller.setOrder(LayoutAnimationController.ORDER_NORMAL);linearlayout.setLayoutAnimation(controller);7.2.2 Activity的切换效果
Intent intent =new Intent(this,TestActivity.class);startActivity(intent);overridePendingTransition(R.anim.enter_anim,R.anim.exit_anim);退出Activity:
@Overridepublic void finish() {super.finish();overridePendingTransition(R.anim.enter_anim,R.anim.exit_anim);}7.3 属性动画
ValueAnimator colorAnim=ObjectAnimator.ofInt(this,"backgroundColor",0xFFFF8080,0xFF8080FF);colorAnim.setDuration(3000);colorAnim.setEvaluator(new ArgbEvaluator());colorAnim.setRepeatCount(ValueAnimator.INFINITE);colorAnim.setRepeatMode(ValueAnimator.REVERSE);colorAnim.start();属性动画的XML格式语法如下:
<?xml version="1.0" encoding="utf-8" ?><set xmlns:android="http://schemas.android.com/apk/res/android"android:ordering="sequentially|together"><!--together:子动画同时播放。sequentially:自动化按照先后顺序依次播放--><objectAnimatorandroid:duration="int"<!--动画时长-->android:propertyName="string"<!--属性名称-->android:repeatCount="int"<!--重复次数-->android:repeatMode="restart|reverse"<!--重复模式-->android:startOffset="int"<!--延迟时间-->android:valueFrom="float|int|color"<!--属性起始值-->android:valueTo="float|int|color"<!--属性结束值-->android:valueType="colorType|intType|floatType|pathType" /><!--属性类型--><animatorandroid:duration="int"android:repeatCount="int"android:repeatMode="restart|reverse"android:startOffset="int"android:valueFrom="float|int|color"android:valueTo="float|int|color"android:valueType="colorType|intType|floatType|pathType" /></set>android:repeatCount 动画的循环次数,默认为0,-1为无限循环;
AnimatorSet set=(AnimatorSet) AnimatorInflater.loadAnimator(context,R.anim.property_animator);set.setTarget(button);set.start();实际开发中建议使用代码来实现属性动画,不要使用xml的方式。