Android實現動畫的實現方式

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();  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章