Android實現動畫的方式有很多,其中第一種方式是
建立一個xml的文件寫在裏面
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<!-- fromAlpha和toAlpha是起始透明度和結束時透明度 -->
<alpha
android:duration="500"
android:fromAlpha="1.0"
android:startOffset="500"
android:toAlpha="0.0" />
<!--旋轉
fromDegrees:開始的角度
toDegrees:結束的角度,+表示是正的
pivotX:用於設置旋轉時的x軸座標
例(1)當值爲"50",表示使用絕對位置定位(2)當值爲"50%",表示使用相對於控件本身定位(3)當值爲"50%p",表示使用相對於控件的父控件定位
pivotY:用於設置旋轉時的y軸座標
-->
<rotate
android:duration="1000"
android:fromDegrees="0"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="+360" />
<!-- 漸變尺寸縮小
fromXScale 起始x軸座標
toXScale 止x軸座標
fromYScale 始y軸座標
toYScale 止y軸座標
toXScale 以X軸的座標爲軸
toYScale 以Y軸的座標爲軸-->
<scale
android:duration="1000"
android:fromXScale="1.0"
android:fromYScale="1.0"
android:pivotX="50%"
android:pivotY="50%"
android:toXScale="0.0"
android:toYScale="0.0" />
<!-- 移動動畫
fromXDelta 始x軸座標
toXDelta 止x軸座標
fromYDelta 始y軸座標
toYDelta 止y軸座標
-->
<translate
android:fromXDelta="0%"
android:toXDelta="100%"
android:fromYDelta="0%"
android:toYDelta="100%"
android:duration="2000"/>
</set>
/第一個參數Context爲程序的上下文
//第二個參數id爲動畫XML文件的引用
//例子:
Animation myAnimation= AnimationUtils.loadAnimation(this,R.anim.my_anim);
//使用AnimationUtils類的靜態方法loadAnimation()來加載XML中的動畫XML文件
第二種方式
//縮放
從哪裏開始
item_gv_popupwindow.setPivotX(300);
item_gv_popupwindow.setPivotY(100);
// ObjectAnimator
// .ofFloat(item_gv_popupwindow, "pivotX", this.getWallpaperDesiredMinimumWidth() / 2)//
// .setDuration(0)//
// .start();
// ObjectAnimator
// .ofFloat(item_gv_popupwindow, "scaleX", 0.0F, 1.0F)//
// .setDuration(3000)//
// .start();
// ObjectAnimator
// .ofFloat(item_gv_popupwindow, "scaleY", 0.0F, 1.0F)//
// .setDuration(3000)//
//// .start();
//旋轉
// ObjectAnimator
// .ofFloat(item_gv_popupwindow, "pivotX", this.getWallpaperDesiredMinimumWidth() / 4)//
// .setDuration(0)//
// .start();
// ObjectAnimator
// .ofFloat(item_gv_popupwindow, "rotationY", 0.0F, 360.0F)//
// .setDuration(3000)//
// .start();
//透明
// ObjectAnimator
// .ofFloat(item_gv_popupwindow, "alpha", 0.0F, 1.0F)//
// .setDuration(3000)//
// .start();
//移動
// ObjectAnimator
// .ofFloat(item_gv_popupwindow, "translationX", 100.0F, 0.0f,-50f,300.0F)//
// .setDuration(3000)//
// .start();
//多種動畫漸變寫法
PropertyValuesHolder pvhX = PropertyValuesHolder.ofFloat("alpha", 0f, 1f);
PropertyValuesHolder pvhY = PropertyValuesHolder.ofFloat("scaleX", 0, 1f);
PropertyValuesHolder pvhh = PropertyValuesHolder.ofFloat("pivotX", 300,400);
PropertyValuesHolder pvhi = PropertyValuesHolder.ofFloat("pivotY", 200,100);
PropertyValuesHolder pvhZ = PropertyValuesHolder.ofFloat("scaleY", 0, 1f);
ObjectAnimator.ofPropertyValuesHolder(item_gv_popupwindow, pvhX, pvhh,pvhi,pvhY, pvhZ).setDuration(3000).start();
// 同時執行動畫
ObjectAnimator anim1 = ObjectAnimator.ofFloat(mBlueBall, "scaleX",
1.0f, 2f);
ObjectAnimator anim2 = ObjectAnimator.ofFloat(mBlueBall, "scaleY",
1.0f, 2f);
AnimatorSet animSet = new AnimatorSet();
animSet.setDuration(2000);
animSet.setInterpolator(new LinearInterpolator());
//兩個動畫同時執行
animSet.playTogether(anim1, anim2);
animSet.start();
// anim1,anim2,anim3同時執行 anim4接着執行
float cx = mBlueBall.getX();
ObjectAnimator anim1 = ObjectAnimator.ofFloat(mBlueBall, "scaleX",
1.0f, 2f);
ObjectAnimator anim2 = ObjectAnimator.ofFloat(mBlueBall, "scaleY",
1.0f, 2f);
ObjectAnimator anim3 = ObjectAnimator.ofFloat(mBlueBall,
"x", cx , 0f);
ObjectAnimator anim4 = ObjectAnimator.ofFloat(mBlueBall,
"x", cx);
/**
* anim1,anim2,anim3同時執行
* anim4接着執行
*/
AnimatorSet animSet = new AnimatorSet();
animSet.play(anim1).with(anim2);
animSet.play(anim2).with(anim3);
animSet.play(anim4).after(anim3);
animSet.setDuration(1000);
animSet.start();