animation 分类
- property animation: 相比view animation,property animation可以更改view本身任何property(如color,position,size),而且也包括非view的对象,
- view animation(tween): 只更改view画的位置,click等事件位置并没有更改,还需在原位置click, 但总体使用更容易,更简单。
- drawable animation(frame) : 多张图片资源连续切换的效果
propertyAnimator:
ValueAnimator: 完全自定义自己的动画变化规律,
ObjectAnimator:继承ValueAnimator, 可以用PropertyValuesHolder打包多个property一起设置,从而减少ObjectAnimator数量
ViewPropertyAnimator: View.animate()....
Multiple ObjectAnimator objects
ObjectAnimator animX = ObjectAnimator.ofFloat(myView, "x", 50f);
ObjectAnimator animY = ObjectAnimator.ofFloat(myView, "y", 100f);
AnimatorSet animSetXY = new AnimatorSet();
animSetXY.playTogether(animX, animY);
animSetXY.start();
One ObjectAnimator
PropertyValuesHolder pvhX = PropertyValuesHolder.ofFloat("x", 50f);
PropertyValuesHolder pvhY = PropertyValuesHolder.ofFloat("y", 100f);
ObjectAnimator.ofPropertyValuesHolder(myView, pvhX, pvhY).start();
ViewPropertyAnimator
myView.animate().x(50f).y(100f);
其中有多种property可以设置,参考ViewPropertyAnimator类方法:
除了Java code实现方式, xml的配置同理:
<set android:ordering="sequentially">
<set>
<objectAnimator
android:propertyName="x"
android:duration="500"
android:valueTo="400"
android:valueType="intType"/>
<objectAnimator
android:propertyName="y"
android:duration="500"
android:valueTo="300"
android:valueType="intType"/>
</set>
<objectAnimator
android:propertyName="alpha"
android:duration="500"
android:valueTo="1f"/>
</set>
然后java 中通过下面方式使用:
AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(myContext,
R.anim.property_animator);
set.setTarget(buttonView);
set.start();
view animation:
一般view的变化主要有<alpha>
, <scale>
, <translate>
, <rotate>,所以对应的view 动画主要分为:
AlphaAnimation, RotateAnimation, ScaleAnimation, TranslateAnimation
使用方法java代码:
TranslateAnimation ta = new TranslateAnimation(0f, 300f, 0f, 300f);
ta.setFillAfter(true);
ta.setDuration(300);
btn.startAnimation(ta);
xml配置方式:
<scale android:interpolator="@android:anim/accelerate_decelerate_interpolator" android:fromXScale="1.0" android:toXScale="1.4" android:fromYScale="1.0" android:toYScale="0.6" android:pivotX="50%" android:pivotY="50%" android:fillAfter="false" android:duration="700" /> <set android:interpolator="@android:anim/decelerate_interpolator"> <scale android:fromXScale="1.4" android:toXScale="0.0" android:fromYScale="0.6" android:toYScale="0.0" android:pivotX="50%" android:pivotY="50%" android:startOffset="700" android:duration="400" android:fillBefore="false" /> <rotate android:fromDegrees="0" android:toDegrees="-45" android:toYScale="0.0" android:pivotX="50%" android:pivotY="50%" android:startOffset="700" android:duration="400" /> </set>
AnimationUtils.loadAnimation
drawable animation :
可以把如下加到ImageView作背景, 需要启动动画时把ImageView的background转化成AnimationDrawable,然后start:
(AnimationDrawable) imageView.getBackground().start();
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="true">
<item android:drawable="@drawable/rocket_thrust1" android:duration="200" />
<item android:drawable="@drawable/rocket_thrust2" android:duration="200" />
<item android:drawable="@drawable/rocket_thrust3" android:duration="200" />
</animation-list>