Android 屬性動畫

本來想先放實現效果,後來手機實在捉急,只能後續再補啦。
一 實現透明效果:

//屬性動畫變透明
    private void alphaAnim(){
        //不透明--->透明--->不透明 2s鍾時間平均分配
        ObjectAnimator objectAnimator=ObjectAnimator.ofFloat(imageView,"alpha",1f,0f,1f);
        //從不透明變成透明
//        ObjectAnimator objectAnimator=ObjectAnimator.ofFloat(imageView,"alpha",1f,0f);
        //只執行一次動畫時,可以省略1f
//        ObjectAnimator objectAnimator=ObjectAnimator.ofFloat(imageView,"alpha",0f);
        objectAnimator.setDuration(2000);  //設置動畫時間爲2000ms
        objectAnimator.start();
    }

1f爲完全不透明   0f爲完全透明

二:實現旋轉效果

//屬性動畫 旋轉
    private void rotationAnim(){
        //0-->360 順時針 360-->0 逆時針
        //下個度數大於上個度數,順時針旋轉;下個度數小於上個度數,逆時針旋轉。
        ObjectAnimator objectAnimator=ObjectAnimator.ofFloat(imageView,"rotation",0f,360,0);
        objectAnimator.setDuration(5000);
        objectAnimator.start();
    }

三 實現平移效果:

//平移
    private void translationAnim(){
        // translationX 沿着x軸移動 上個數大於下個數,左移。反之右移
//        ObjectAnimator objectAnimator=ObjectAnimator.ofFloat(imageView,"translationX",0f,-300f,0f);  //左移-->右移
        // translationX 沿着x軸移動 上個數大於下個數,上移。反之下移
        ObjectAnimator objectAnimator=ObjectAnimator.ofFloat(imageView,"translationY",0f,300f,0f);  //下移-->上移
        objectAnimator.setDuration(5000);
        objectAnimator.start();
    }

四 實現縮放效果

//縮放
    private void scaleAnim(){
        ObjectAnimator objectAnimator=ObjectAnimator.ofFloat(imageView,"scaleX",1f,2f,1f); //沿着x軸放大兩倍再返回
        ObjectAnimator objectAnimator1=ObjectAnimator.ofFloat(imageView,"scaleY",1f,2f,1f); //沿着Y軸放大兩倍再返回
        objectAnimator.setDuration(5000);
        objectAnimator1.setDuration(5000);
        objectAnimator.start();
        objectAnimator1.start();
    }

五 組合動畫
以上都是基本動畫,如果只有基本動畫,顯然是不夠的,所以還有個類AnimatorSet,專門來組合這些動畫。
AnimatorSet:這個類提供了一個play()方法,調用後將會返回一個AnimatorSet.Builder的實例,AnimatorSet.Builder中包括以下四個方法:

after(Animator anim) :將現有動畫插入到傳入的動畫之後執行
after(long delay) :將現有動畫延遲指定毫秒後執行
before(Animator anim): 將現有動畫插入到傳入的動畫之前執行
with(Animator anim) :將現有動畫和傳入的動畫同時執行

//組合動畫
    private void setAnim(){
        //沿x軸放大
        ObjectAnimator scaleXAnimator = ObjectAnimator.ofFloat(imageView, "scaleX", 1f, 2f, 1f);
        //沿y軸放大
        ObjectAnimator scaleYAnimator = ObjectAnimator.ofFloat(imageView, "scaleY", 1f, 2f, 1f);
        //移動
        ObjectAnimator translationXAnimator = ObjectAnimator.ofFloat(imageView, "translationX", 0f, 200f, 0f);
        //透明動畫
        ObjectAnimator alphaAnimator = ObjectAnimator.ofFloat(imageView, "alpha", 1f, 0f, 1f);
        AnimatorSet animatorSet=new AnimatorSet();
        //同時沿X,Y軸放大,且改變透明度,然後移動
        //在3s內,沿x、y軸同時放大,然後縮小,在縮放的同時還要改變透明度。然後再完成3s的左右移動。
        animatorSet.play(scaleXAnimator).with(scaleYAnimator).with(alphaAnimator).before(translationXAnimator);
        //每個動畫都設置成3s,也可以分別設置
        animatorSet.setDuration(3000);
        animatorSet.start();
    }

六 在xml中實現動畫效果
1.透明:

<?xml version="1.0" encoding="utf-8"?>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="2000"
    android:propertyName="alpha"
    android:repeatCount="-1"
    android:repeatMode="reverse"
    android:valueFrom="0.5"
    android:valueTo="1"
    android:valueType="floatType">
    <!--
    android:duration:動畫持續時間;
    android:propertyName:動畫類型;
    android:repeatCount:重複次數,-1爲一直重複;
    android:repeatMode:重複模式:reverse(從結束的位置繼續), restart(從新開始);
    android:valueFrom:起始值;
    android:valueTo:結束值。
    android:valueType:值類型
    -->

</objectAnimator>

在佈局中的實現:

//alpha.xml對應的代碼實現
    private void alphaXml(){
        Animator animator= AnimatorInflater.loadAnimator(this,R.animator.alpha);
        animator.setTarget(imageView);
        animator.start();
    }

2.旋轉

<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
    android:valueFrom="0"
    android:valueTo="360"
    android:duration="2000"
    android:propertyName="rotation"
    android:valueType="floatType"/>

3.移動

<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="2000"
    android:propertyName="translationX"
    android:repeatCount="-1"
    android:repeatMode="reverse"
    android:valueFrom="0"
    android:valueTo="200" 
    android:valueType="floatType"/>

4.縮放:

<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="2000"
    android:propertyName="scaleX"
    android:valueFrom="1"
    android:valueTo="1.5"
    android:valueType="floatType" />

5.組合:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:ordering="sequentially">
    <set>
        <objectAnimator
            android:duration="4000"
            android:propertyName="rotation"
            android:repeatMode="reverse"
            android:valueFrom="0"
            android:valueTo="360" />
        <set android:ordering="sequentially">
            <objectAnimator
                android:duration="2000"
                android:propertyName="translationX"
                android:repeatMode="reverse"
                android:valueFrom="0"
                android:valueTo="200" />
            <objectAnimator
                android:duration="2000"
                android:propertyName="translationX"
                android:repeatMode="reverse"
                android:valueFrom="200"
                android:valueTo="0" />
        </set>
    </set>
    <set >
        <objectAnimator
            android:duration="4000"
            android:propertyName="rotation"
            android:repeatMode="reverse"
            android:valueFrom="0"
            android:valueTo="360" />
        <set android:ordering="sequentially">
            <objectAnimator
                android:duration="2000"
                android:propertyName="translationX"
                android:repeatMode="reverse"
                android:valueFrom="0"
                android:valueTo="-200" />
            <objectAnimator
                android:duration="2000"
                android:propertyName="translationX"
                android:repeatMode="reverse"
                android:valueFrom="-200"
                android:valueTo="0" />
        </set>
    </set>
</set>
這裏需要說下set中的屬性android:ordering:規定了這個set中的動畫的執行順序,包括:
together(默認):set中的動畫同時執行
sequentially:set中的動畫按順序執行

好啦,屬性動畫的需求,這些基本就滿足啦,嘿嘿。
參考博客:https://www.jianshu.com/p/d23f58f4368d

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章