Android動畫模板
阿新 • • 發佈:2018-11-28
1.ViewAnimation(檢視動畫)
xml方法:
在res目錄下新建anim資料夾,並建立一個xml檔案:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000"
android:fillAfter="true"
android:repeatMode="restart">
<alpha
android: fromAlpha="1"
android:toAlpha="0" />
<scale
android:fromXScale="1"
android:fromYScale="1"
android:pivotX="50%"
android:pivotY="50%"
android:toXScale="2"
android:toYScale="2" />
<translate
android: fromXDelta="0"
android:fromYDelta="0"
android:toXDelta="50%"
android:toYDelta="50%" />
<rotate
android:fromDegrees="0"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="360" />
</set>
Java程式碼:
Animation anim = AnimationUtils.loadAnimation(this,R.anim.my_anim);
anim.setInterpolator(this,android.R.anim.accelerate_decelerate_interpolator);
findViewById(R.id.image).startAnimation(anim);
注:屬性pivotX/Y,fromX/YDelta,toX/YDelta屬性有三種賦值方式:
1.直接賦予數值,表示軸點在該檢視左上角加上該數值,注意單位是px,不是dp
2.數值a%,表示軸點在該檢視的a%處
3.數值a%p,表示軸點在該檢視的左上角加上父檢視長寬的a%
另Interpolator也可以自定義,其xml檔案也寫在anim目錄下,略。
2.DrawableAnimation(幀動畫)
在res/drawable目錄下建立一個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/lottery_1"
android:duration="200" />
<item
android:drawable="@mipmap/lottery_2"
android:duration="200" />
<item
android:drawable="@mipmap/lottery_3"
android:duration="200" />
</animation-list>
其中oneshot表示是否迴圈播放
Java程式碼:
ImageView imageView = ((ImageView)(findViewById(R.id.image)));
imageView.setImageResource(R.drawable.my_anim);
AnimationDrawable drawable = (AnimationDrawable) imageView.getDrawable();
drawable.start();
3.PropertyAnimation(屬性動畫)
ValueAnimator:
Java:ofInt(int …)和ofFloat(float …)
ValueAnimator animator = ValueAnimator.ofInt(0,10,5);
animator.setDuration(1000);
animator.setStartDelay(100);
animator.setRepeatCount(5);
animator.setRepeatMode(ValueAnimator.REVERSE);
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
}
});
animator.start();
ofObject(TypeEvaluator, Object…):
先定義一個物件,如point; 再實現一個TypeEvaluator
Point p1 = new Point(0,0);
Point p2 = new Point(10,10);
TypeEvaluator evaluator = new TypeEvaluator() {
@Override
public Object evaluate(float v, Object o1, Object o2) {
//v表示動畫完成度
return null;
}
};
ValueAnimator animator = ValueAnimator.ofObject(evaluator,p1,p2);
animator.start();
ObjectAnimator
String property = "alpha" // rotation rotationX translationX scaleX
ObjectAnimator animator = ObjectAnimator.ofFloat(View, property", 0f, 1f, 0f);
animator.setDuration(5000);
animator.start();