android動畫

動畫:

分類:分為視圖動畫屬性動畫,其中視圖動畫又分為補間動畫逐幀動畫補間動畫又分為平移動畫唾糯、縮放動畫旋轉動畫涡上、透明度動畫趾断。
創(chuàng)建:利用xml文件來定義View動畫的話,需要在工程的res目錄下創(chuàng)建anim文件夾吩愧,把定義的動畫都放到里面


視圖動畫

補間動畫(xml實現(xiàn)芋酌、java實現(xiàn)未記錄):

公共屬性(這些屬性是從Animation中繼承下來的,在alpha雁佳、rotate脐帝、scale、translate標簽中都可以直接使用糖权。):

    android:duration="3000" // 動畫持續(xù)時間(ms)堵腹,必須設置,動畫才有效果

    android:startOffset ="1000" // 動畫延遲開始時間(ms)

    android:fillBefore = “true” // 動畫播放完后星澳,視圖是否會停留在動畫開始的狀態(tài)疚顷,默認為true

    android:fillAfter = “false” // 動畫播放完后,視圖是否會停留在動畫結束的狀態(tài),優(yōu)先于fillBefore值腿堤,默認為false

    android:fillEnabled= “true” // 是否應用fillBefore值阀坏,對fillAfter值無影響,默認為true

    android:repeatMode= “restart” // 選擇重復播放動畫模式笆檀,restart代表正序重放忌堂,reverse代表倒序回放,默認為restart|

    android:repeatCount = “0” // 重放次數(shù)(所以動畫的播放次數(shù)=重放次數(shù)+1)酗洒,為infinite時無限重復

    android:interpolator = @[package:]anim/interpolator_resource // 插值器士修,相當于變速器,改變不同階段的執(zhí)行速度

平移動畫獨有屬性:

fromXDelta="0"    //x初始位置  /  toXDeleta="500"   //x結束位置

fromYDeleta="0"   /    toYDeleta="500"

平移動畫實例( R.anim.view_tran):


<?xml version="1.0" encoding="utf-8"?>

    android:duration="3000"

    android:startOffset ="1000"

    android:fillBefore = "true"

    android:fillAfter = "false"

     android:fillEnabled= "true"

     android:repeatMode= "restart"

     android:repeatCount = "0"

     android:fromXDelta="0"

     android:toXDelta="-50"

     android:fromYDelta="0"

     android:toYDelta="-100%"

 />

縮放動畫獨有屬性

fromXScale="0.0"  X從0開始    /  toXScale=“2”  x放大到二倍 

fromYScale  /   toYScale

縮放動畫實例(R.anim.view_scal):


<?xml version="1.0" encoding="utf-8"?>
    android:duration="3000"

    android:startOffset ="1000"

    android:fillBefore = "true"

    android:fillAfter = "false"

    android:fillEnabled= "true"

    android:repeatMode= "restart"

    android:repeatCount = "0"

    android:fromXScale="0.5"

    android:toXScale="2"

    android:fromYScale="0.5"

    android:toYScale="2"

    android:pivotX="50%"

    android:pivotY="50%"

/>

透明度獨有屬性:

fromAlpha="1.0" //動畫開始是透明度 
toAlpha="0.2"              // 動畫結束時透明度

透明度動畫實例(R.anim.view_alph):


<?xml version="1.0" encoding="utf-8"?>

    android:duration="3000"

    android:startOffset ="1000"

    android:fillBefore = "true"

    android:fillAfter = "false"

    android:fillEnabled= "true"

    android:repeatMode= "restart"

    android:repeatCount = "0"

    android:fromAlpha="1.0"

    android:toAlpha="0.2"

/>

旋轉獨有屬性:

fromDegress="0"  旋轉開始角度 //toDegress=“250”   旋轉結束角度     

pivotX旋轉軸點X坐標   pivotY 旋轉軸點Y坐標

旋轉動畫實例(R.anim.view_rota):


<?xml version="1.0" encoding="utf-8"?>

    android:duration="3000"

    android:startOffset ="1000"

    android:fillBefore = "true"

    android:fillAfter = "false"

    android:fillEnabled= "true"

    android:repeatMode= "restart"

    android:repeatCount = "0"

    android:fromDegrees="0"

    android:toDegrees="360"

    android:pivotX="50%"

    android:pivotY="50%"

/>

rotate樱衷、scale動畫的android:pivotX和android:pivotY屬性棋嘲、translate動畫的android:toXDelta和android:toYDelta屬性的取值都可以是都可以數(shù)值、百分數(shù)箫老、百分數(shù)p封字,比如:50、50%耍鬓、50%p,他們?nèi)≈档拇淼囊饬x各不相同:

50表示以View左上角為原點沿坐標軸正方向(x軸向右流妻,y軸向下)偏移50px的位置牲蜀;

50%表示以View左上角為原點沿坐標軸正方向(x軸向右,y軸向下)偏移View寬度或高度的50%處的位置绅这;

50%p表示以View左上角為原點沿坐標軸正方向(x軸向右涣达,y軸向下)偏移父控件寬度或高度的50%處的位置(p表示相對于ParentView的位置)。

java代碼中啟動(以上四種補間動畫的啟動方式):

Animation translateAnimation = AnimationUtils.loadAnimation(this, R.anim.view_tran);
btTran.startAnimation(translateAnimation);

逐幀動畫:

步驟: 1.將每一幀的圖片放入drawable文件夾
2.設置xml文件证薇,在java代碼中啟動
xml:

<animation-list

    xmlns:android="http://schemas.android.com/apk/res/android"

    android:oneshot="true"http://動畫是否執(zhí)行一次

>

    <item android:drawable="@drawable/img0" android:duration="100"/>

    <item android:drawable="@drawable/img1" android:duration="100"/>

</animation-list>

java代碼中啟動:

    ImageView  imgKnightAttack;

    imgKnightAttack.setImageResource(R.drawable.knight_attack);
    // 1. 設置動畫

    animationDrawable = (AnimationDrawable)imgKnightAttack.getDrawable();

    // 2. 獲取動畫對象

    animationDrawable .start()和animationDrawable .stop()

同時視圖動畫可以設置動畫執(zhí)行監(jiān)聽器:


animation.setAnimationListener(new Animation.AnimationListener() {

    @Override    public void onAnimationStart(Animation animation) {

        // 動畫開始    
    }

    @Override    public void onAnimationEnd(Animation animation) {

        // 動畫結束    
    }

    @Override    public void onAnimationRepeat(Animation animation) {

        //動畫重復    
    }

});

屬性動畫:

定義:控制屬性來實現(xiàn)動畫度苔,和另外兩個動畫一樣,既可以用xml來控制浑度,也可以用java代碼控制寇窑。啟動也是java來控制
xml實現(xiàn)例子(view_attribute_animation):

    <?xml version="1.0" encoding="utf-8"?>

    <objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"

        android:duration="2000" //動畫持續(xù)時間

        android:propertyName="alpha" //動畫類型

        android:repeatCount="1" //重復次數(shù)

        android:repeatMode="restart"  //重復模式 ,restart重新開始 箩张,reverse倒序回放

        android:valueFrom="0"

        android:valueTo="1"

        android:valueType="floatType"   //值類型

       />

通過android:propertyName來控制 是那種動畫 和視圖動畫相同甩骏,分為四種,細分為以下幾種 scaleY/scaleX;translationX/translationY;alpha;rotation;其他屬性是在xml文件中有提示的先慷。

組合動畫 :

下面例子是 360度旋轉著向x軸正方向位移200像素饮笛,然后再旋轉著位移回原點,

然后執(zhí)行第二段向反方向執(zhí)行一次论熙。


    <?xml version="1.0" encoding="utf-8"?>

    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>

默認為 together :set中的動畫同時執(zhí)行

    sequentially :set中的動畫順序執(zhí)行


java代碼中啟動:
    Animator  animator = AnimatorInflater.loadAnimator(this,     R.anim.view_attribute_animation);

    animator.setTarget(imgAttribute);

    animator.start();

java代碼形式
第一個參數(shù)是要綁定的組件 實例化的名字例如 ImageView imageView;第二個參數(shù)是要實現(xiàn)的動畫名細分scaleY/scaleX;translationX/translationY;alpha;rotation;第三第四個福青,代表執(zhí)行的動畫效果,同時,可以加更多參數(shù)无午,代表該動畫執(zhí)行多次

ObjectAnimatoranimator=ObjectAnimator.ofFloat(imageView,"alpha",1f,0f);

animator.setDuration(1000);//時間1s

animator.start();

同時例如在旋轉的時候媒役,第三,第四個寫的 如果前面的比后面的大指厌,那么久代表逆時針(360f,0f 這表示逆時針旋轉)刊愚,移動同理,前面比后面大踩验,代表負方向移動鸥诽。

補間動畫和屬性動畫的區(qū)別
如果需求只是對View進行移動,縮放箕憾,旋轉和淡入淡出的操作牡借,補間動畫就足夠了,但是如果超出就沒法了袭异,而且補間動畫最大的缺陷就是只改變了View的顯示效果钠龙,而沒有改變真正的顯示效果,沒有真正改變View的屬性(例如在動畫執(zhí)行結束后御铃,對組件執(zhí)行點擊事件碴里,無反應)。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末上真,一起剝皮案震驚了整個濱河市咬腋,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌睡互,老刑警劉巖根竿,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異就珠,居然都是意外死亡寇壳,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進店門妻怎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來壳炎,“玉大人,你說我怎么就攤上這事蹂季∶峁悖” “怎么了?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵偿洁,是天一觀的道長撒汉。 經(jīng)常有香客問我,道長涕滋,這世上最難降的妖魔是什么睬辐? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上溯饵,老公的妹妹穿的比我還像新娘侵俗。我一直安慰自己,他們只是感情好丰刊,可當我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布隘谣。 她就那樣靜靜地躺著,像睡著了一般啄巧。 火紅的嫁衣襯著肌膚如雪寻歧。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天秩仆,我揣著相機與錄音码泛,去河邊找鬼。 笑死澄耍,一個胖子當著我的面吹牛噪珊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播齐莲,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼痢站,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了选酗?” 一聲冷哼從身側響起瑟押,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎星掰,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嫩舟,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡氢烘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了家厌。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片播玖。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖饭于,靈堂內(nèi)的尸體忽然破棺而出蜀踏,到底是詐尸還是另有隱情,我是刑警寧澤掰吕,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布果覆,位于F島的核電站,受9級特大地震影響殖熟,放射性物質發(fā)生泄漏局待。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望钳榨。 院中可真熱鬧舰罚,春花似錦、人聲如沸薛耻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽饼齿。三九已至饲漾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間候醒,已是汗流浹背能颁。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留倒淫,地道東北人伙菊。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像敌土,于是被迫代替她去往敵國和親镜硕。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,614評論 2 353