Android 動畫Animation

動畫Animationandroid

有兩種加載方式:ide

       一:再res文件夾下的anim文件夾裏面的xml文件中編寫實現(幀動畫得再drawable中寫)佈局

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <alpha
  
    </alpha>

</set>

                 中間部分是相應的動畫名稱:動畫

               一共有alpha(透明度),rotate(旋轉),scale(縮放),translate(平移)四種基本的動畫this

       二:經過再代碼中用相應的類實現。spa

               一樣的相應類的名稱AlphaAnmation, RotateAnmation, ScaleAnmation, TranslateAnmationcode

 

先給出再xml文件中怎麼樣寫動畫和怎樣調用:xml

透明度動畫:blog

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <!--透明度動畫
        duration:動畫時間
        fromAlpha:開始的透明度
        toAlpha:結束的透明度-->
    <alpha
        android:duration="1000"
        android:fromAlpha="0.1"
        android:toAlpha="1.0" >
    </alpha>

</set>

旋轉動畫:three

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <!--旋轉動畫
        duration:動畫時間
        fromDegrees:開始的角度
        toDegrees:結束的角度
        pivotX:旋轉中心X以圖片的寬的百分比位置開始
        pivotY:旋轉中心Y以圖片的高的百分比位置開始
        interpolator:旋轉動畫的樣式-->
    <rotate
        android:duration="1000"
        android:fromDegrees="0"
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toDegrees="+360" />

</set>

縮放動畫:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <!--縮放動畫
        duration:動畫時間
        fillAfter:動畫結束後是否回覆原樣
        fromXScale:開始時縮放寬的比例
        fromYScale:開始時縮放高的比例
        toXScale:結束時縮放寬的比例
        toYScale:結束時縮放高的比例
        pivotX:以圖片的寬的百分比位置開始
        pivotY:以圖片的高的百分比位置開始
        interpolator:縮放動畫的樣式,這裏是勻加速-->
    <scale
        android:duration="2000"
        android:fillAfter="false"
        android:fromXScale="0.0"
        android:fromYScale="0.0"
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="1.0"
        android:toYScale="1.0" />

</set>

位移動畫:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <!--透明度動畫
        duration:動畫時間
        fromXDelta:開始時X位置
        fromYDelta:開始時Y位置
        toXDelta:結束時Y位置
        toYDelta:結束時Y位置
        位置都是相對與圖片中心點的相對位置-->
    <translate
        android:duration="1000"
        android:fromXDelta="10"
        android:fromYDelta="10"
        android:toXDelta="100"
        android:toYDelta="100" />

</set>

 

  實現方法:(這裏用圖片加載爲例子)

loadAnimation = AnimationUtils.loadAnimation(this, R.anim.XXX);XXX是動畫的xml文件明
image.startAnimation(loadAnimation);

動態加載也相似:(以透明度爲例子)
AlphaAnimation alphaAnimation = new AlphaAnimation(0.1f, 1.0f);//構建透明度動畫透明度0.1到1
alphaAnimation.setDuration(100);//動畫時間
image.startAnimation(alphaAnimation);


接下來將一下組合動畫:有兩種組合動畫的方式
第一種:直接再xml文件種這樣寫:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <!--startOffset:延遲多少時間後執行-->
    <alpha
        android:duration="3000"
        android:fromAlpha="0.2"
        android:toAlpha="1.0" />
    <alpha
        android:duration="3000"
        android:fromAlpha="1.0"
        android:startOffset="3000"
        android:toAlpha="0.2" />

</set>
 

而後加載這個動畫文件便可

 

第二種:

//連續1(先位移再旋轉)
            case R.id.continue_btn: {
                loadAnimation = AnimationUtils.loadAnimation(this, R.anim.translate);
                final Animation loadAnimation2 = AnimationUtils.loadAnimation(this, R.anim.rotate);
                image.startAnimation(loadAnimation);
                //設置動畫監聽器
                loadAnimation.setAnimationListener(new AnimationListener() {
                    @Override//動畫開始時回調
                    public void onAnimationStart(Animation arg0) {
                        // TODO Auto-generated method stub
                    }

                    @Override//動畫進行時回調
                    public void onAnimationRepeat(Animation arg0) {
                        // TODO Auto-generated method stub
                    }

                    @Override//動畫結束時回調
                    public void onAnimationEnd(Animation arg0) {
                        // TODO Auto-generated method stub
                        image.startAnimation(loadAnimation2);
                    }
                });
                break;
            }

這種方法更靈活

哦隊了除了這種以外,其實再建立動畫類的時候能夠這樣實現重複動畫:

 TranslateAnimation translate = new TranslateAnimation(-50, 50, 0, 0);
                translate.setDuration(1000);//動畫時間
                translate.setRepeatCount(Animation.INFINITE);//無限重複
                translate.setRepeatMode(Animation.REVERSE);//倒序重複REVERSE  正序重複RESTART
                image.startAnimation(translate);

 

咱們再Activity切換的時候也能夠添加切換的動畫效果哦!

咱們只須要用這個方法便可

//第二個Activity退出的動畫,第一個Activity進入的動畫
overridePendingTransition(R.anim.zoom_in, R.anim.zoom_out);

佈局加載子佈局的時候也能夠用到動畫!(以ListView爲例子)
public class ListActivity extends Activity{
    
    private ListView listView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.list_layout);
        listView=(ListView) findViewById(R.id.listView);
        List<String>list=new ArrayList<String>();
        for(int i=0;i<20;i++)
        {
            list.add("LWJ"+i);
        }
        ArrayAdapter<String>adapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list);
        listView.setAdapter(adapter);
        /**
         * 佈局動畫控制器
         * 生成一個動畫控制器,裏面的參數:
         * AnimationUtils.loadAnimation(this, R.anim.zoom_in)動畫集合
         * 給this當前佈局加載
         * R.anim.zoom_in: 動畫
         */
        LayoutAnimationController lac=new LayoutAnimationController(AnimationUtils.loadAnimation(this, R.anim.zoom_in));
        //子控件加載順序,這裏是順序加載,ORDER_RANDOM隨機加載
        lac.setOrder(LayoutAnimationController.ORDER_NORMAL);
        listView.setLayoutAnimation(lac);//加載佈局動畫
        listView.startLayoutAnimation();//開始動畫
    }

}

 

最後講一個開頭就說了的幀動畫,注意得再drawable種寫xml文件
直接這樣就能夠調用這個動畫了
image.setImageResource(R.drawable.anim_list);
裏面的參數就是你寫的xml內容以下:
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:drawable="@drawable/one"
        android:duration="500"/>
    <item
        android:drawable="@drawable/two"
        android:duration="500"/>
    <item
        android:drawable="@drawable/three"
        android:duration="500"/>
    <item
        android:drawable="@drawable/four"
        android:duration="500"/>
    <item
        android:drawable="@drawable/five"
        android:duration="500"/>
    <item
        android:drawable="@drawable/six"
        android:duration="500"/>

</animation-list>

 


你執行的時候就會按上面圖片的順序一直切換播放的了。


好告終束了


若是有什麼錯誤,或者我理解錯誤或不當的,懇請你們糾正,謝謝!嘻嘻嘻~
相關文章
相關標籤/搜索