動畫分類
View動畫、幀動畫僵缺、屬性動畫
- View動畫包括:平移胡桃、旋轉(zhuǎn)、縮放磕潮、透明度翠胰,View動畫是一種漸近式動畫
- 幀動畫:圖片切換動畫
- 屬性動畫:通過動態(tài)改變對象的屬性達(dá)到動畫效果
View動畫
繼承自Animation,四個動畫效果實(shí)現(xiàn)類:TranslateAnimation揉抵、ScaleAnimation亡容、RotateAnimation、AlphaAnimation
- XML格式
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:shareInterpolator="true"
android:duration="200"
android:fillAfter="true"
android:zAdjustment="normal"
>
<alpha
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="float"
android:toAlpha="float"/>
<scale
android:fromXScale="float"
android:toXScale="float"
android:fromYScale="float"
android:toYScale="float"
android:pivotX="float"
android:pivotY="float"/>
<translate
android:fromXScale="float"
android:toXScale="float"
android:fromYScale="float"
android:toYScale="float"/>
<rotate
android:fromDegrees="float"
android:toDegrees="float"
android:pivotX="float"
android:pivotY="float"/>
</set>
android:interpolator 表示插值器
android:shareInterpolator 是否共用同一個插值器
android:fillAfter="true" 是否停留結(jié)束位置
android:zAdjustment="normal" 設(shè)置動畫的內(nèi)容運(yùn)行時在Z軸上的位置
- 代碼使用
Animation animation = AnimationUtils.loadAnimation(this, R.anim.animation);
view.startAnimation(animation);
也可以直接代碼使用
-
自定義View動畫繼承Animation冤今,實(shí)現(xiàn)initialize闺兢、applyTransformation方法,分別處理初始化和矩陣變換采用Camera簡化矩陣變換的過程
final Camera camera = new Camera();// 自己創(chuàng)建的Camera
final Matrix matrix = t.getMatrix();// 方法傳過來的矩陣
camera.save();camera.translate(0f, 0f, interpolatedTime); camera.getMatrix(matrix); camera.restore();
幀動畫
- XML定義
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">
<item android:drawable="@mipmap/ic_launcher" android:duration="100"/>
<item android:drawable="@mipmap/ic_launcher" android:duration="100"/>
</animation-list>
android:oneshot="false" false 無限循環(huán)
- 代碼中使用
view.setBackgroundResource(R.drawable.animation_list);
AnimationDrawable drawable = (AnimationDrawable)view.getBackground();
drawable.start();
屬性動畫
- 使用方式一
ObjectAnimator.ofFloat(view, "translationY", 10).start(); - 使用方式二
ValueAnimator valueAnimator = ValueAnimator.ofFloat(0, 1);
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
mAnimatorValue = (float) valueAnimator.getAnimatedValue();
invalidate();
}
});
可以在View中使用
插值器:根據(jù)時間流逝百分比計(jì)算屬性值改變百分比
估值器:根據(jù)屬性值百分比計(jì)算改變后的屬性值