Android動畫小結
阿新 • • 發佈:2018-11-20
Android動畫分為3種:View Animation 、Drawable Animation 、Property Animation。其中View動畫又叫Tween動畫,補間動畫,Drawable動畫又叫Frame動畫,幀動畫。
View動畫
基類是Animation。分為漸變—AlphaAnimation,旋轉—RotateAnimation,伸縮—ScaleAnimation,平移—TranslateAnimation。
可以結合插值器,AnimationSet實現複雜效果。
注意:View動畫只能在View上使用,只是改變介面顯示,並不是真正改變View。
Drawable動畫
使用示例如下
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">
<item android:drawable="@drawable/f1" android:duration="300" />
<item android:drawable="@drawable/f2" android:duration ="300" />
<item android:drawable="@drawable/f3" android:duration="300" />
<item android:drawable="@drawable/f4" android:duration="300" />
</animation-list>
image.setBackgroundResource(R.anim.frame);
AnimationDrawable anim = (AnimationDrawable) image.getBackground();
anim.start ();
Property動畫
真正改變一個Object,API11(Android 3.0)引入
常用類:ObjectAnimator 動畫的執行類,ValueAnimator 動畫的執行類
ObjectAnimator使用示例如下:
PropertyValuesHolder pvhX = PropertyValuesHolder.ofFloat("alpha", 1f, 0f, 1f);
PropertyValuesHolder pvhY = PropertyValuesHolder.ofFloat("scaleX", 1f, 0, 1f);
PropertyValuesHolder pvhZ = PropertyValuesHolder.ofFloat("scaleY", 1f, 0, 1f);
ObjectAnimator.ofPropertyValuesHolder(view,pvhX,pvhY,pvhZ).setDuration(1000).start();
注意:只有實現了Setter和getter的屬性才可以使用
ValueAnimator使用示例如下:
ValueAnimator valueAnimator = new ValueAnimator();
valueAnimator.setDuration(3000);
valueAnimator.setObjectValues(new PointF(0, 0));
valueAnimator.setInterpolator(new LinearInterpolator());
valueAnimator.setEvaluator(new TypeEvaluator<PointF>()
{
// fraction = t / duration
@Override
public PointF evaluate(float fraction, PointF startValue,
PointF endValue)
{
Log.e(TAG, fraction * 3 + "");
// x方向200px/s ,則y方向0.5 * 10 * t
PointF point = new PointF();
point.x = 200 * fraction * 3;
point.y = 0.5f * 200 * (fraction * 3) * (fraction * 3);
return point;
}
});
valueAnimator.start();
ValueAnimator並沒有在屬性上做操作,所以不需要操作的物件的屬性一定要有getter和setter方法,你可以自己根據當前動畫的計算值,來操作任何屬性。