那些年一起學(xué)過的Android動畫(一)

Android動畫有三大類(視圖動畫、幀動畫预厌、屬性動畫【3.0引進(jìn)】)

為了就是讓人機(jī)交互更加友好赞别,(講的高大上一點更容易被關(guān)注!)

合理的使用動畫能讓用戶獲得更加愉悅的使用體驗配乓!你懂的很愉悅仿滔!

動畫分類

android已經(jīng)寫好了一些動畫可以方便的使用例如『透明度』『旋轉(zhuǎn)』『縮放』『位移』

1.視圖動畫(View Animation)


  • 做過Flash的都會知道補(bǔ)間動畫,給出兩個關(guān)鍵幀犹芹,通過一些算法將給定屬性值在給定的時間內(nèi)在兩個關(guān)鍵幀間漸變崎页。
  • 可以給一個View同時設(shè)置多個動畫(AnimationSet,AnimatorSet),比如從透明至不透明的淡入效果腰埂,與從小到大的放大效果飒焦,這些動畫可以同時進(jìn)行,也可以在一個完成之后開始另一個。
  • Android中提供了 AlphaAnimation牺荠、RotateAnimation翁巍、TranslateAnimation、ScaleAnimation看名字就應(yīng)該知道對應(yīng)上面所述的幾個動畫它們的用法也很簡單

   //透明動畫  其他動畫同理 換一下參數(shù)給指定的view啟動動畫就實現(xiàn)了
    AlphaAnimation aa=new AlphaAnimation(0f,1f);
    aa.setDuration(2000);
    view.startAnimation(aa);
    
    在此我不一一贅述代碼休雌。灶壶。因為我懶,而且推薦大家自己看看里面的屬性杈曲,會懂得更多
    釋放你的求知欲吧3哿荨!
    

動畫還需要監(jiān)聽一些事情比如開始担扑、結(jié)束恰响、是否重復(fù)等等

aa.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {
                
            }

            @Override
            public void onAnimationEnd(Animation animation) {

            }

            @Override
            public void onAnimationRepeat(Animation animation) {

            }
        });

1.X 接下來我們在介紹中提到AnimationSet


  • 這個類做動畫一般來說會比較常用,因為它控制了多個動畫一起動還是隊列的動涌献,通俗來講就是你先動還是我先動胚宦,或者說大家一起動起來~! 好像很Happy的樣子

  • 其實就是這個類內(nèi)部維護(hù)了一個List<Animation> AnimationSet繼承于Animation

  • 同樣簡單動畫可以用XML實現(xiàn)燕垃,在我們目錄里可以新建一個anim的文件夾枢劝,里面可以放一個根為「set」的 原理是一樣的

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

    <rotate
        android:fromDegrees="0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toDegrees="180"/>
    <scale
        android:fromXScale="0.5"
        android:fromYScale="0.5"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="1"
        android:toYScale="1"/>
    <translate
        android:fromXDelta="50%"
        android:fromYDelta="50%"
        android:toXDelta="100%"
        android:toYDelta="100%"/>
</set>

使用AnimationUtils.loadAnimation(this,R.anim.sad)加載

(吐槽一下我打樣子輸入法無限給我楊紫你說這么黑好么!@酢!)


AnimationSet set=new AnimationSet(true);
        set.addAnimation(aa);//加進(jìn)去就好了 注意內(nèi)存小心OOM 和內(nèi)存泄露
        set.setFillAfter(true);//保持結(jié)束動畫的樣子,setFillBefore你懂的
        set.setDuration(5000);
        view.startAnimation(set);


 
  • 對于內(nèi)存要有借有還低矮,再借不難

2.幀動畫(Frame Animation)


度娘說

  • 動畫是通過把人物的表情印叁、動作、變化等分解后畫成許多動作瞬間的畫幅军掂,再用攝影機(jī)連續(xù)拍攝成一系列畫面轮蜕,給視覺造成連續(xù)變化的圖畫。它的基本原理與電影蝗锥、電視一樣跃洛,都是視覺暫留原理。醫(yī)學(xué)證明人類具有“視覺暫留”的特性终议,人的眼睛看到一幅畫或一個物體后汇竭,在0.34秒內(nèi)不會消失。利用這一原理穴张,在一幅畫還沒有消失前播放下一幅畫细燎,就會給人造成一種流暢的視覺變化效果。

結(jié)論就是 動畫標(biāo)準(zhǔn)是一秒24幀皂甘,也就是24張畫面組成一秒玻驻。電視播放標(biāo)準(zhǔn)是25幀每秒。

  • 那么就很好理解啦偿枕,1秒大概24幅圖片h邓病;П琛!
網(wǎng)絡(luò)圖片素材

用AS的在drawable中新建一個xml

<?xml version="1.0" encoding="utf-8"?>
 <animation-list
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:oneshot="true"
        >
    <!--
    根標(biāo)簽為animation-list嗤锉,其中oneshot代表著是否只展示一遍渔欢,設(shè)置為false會不停的循環(huán)播放動畫
    根標(biāo)簽下,通過item標(biāo)簽對動畫中的每一個圖片進(jìn)行聲明
    android:duration 表示展示所用的該圖片的時間長度
 -->

    <item android:drawable="@drawable/icon1" android:duration="150"></item>
        <item android:drawable="@drawable/icon2" android:duration="150"></item>
        <item android:drawable="@drawable/icon3" android:duration="150"></item>
        <item android:drawable="@drawable/icon4" android:duration="150"></item>
        <item android:drawable="@drawable/icon5" android:duration="150"></item>
        <item android:drawable="@drawable/icon6" android:duration="150"></item>
    </animation-list>
    
    
    在activity中用一下即可
    
        view.setImageResource(R.drawable.icon);
        AnimationDrawable ad = (AnimationDrawable) view.getDrawable();
        ad.start();
        
        當(dāng)然你可以手動添加圖片幀
        ad.addFrame(@NonNull Drawable frame, int duration)
        

3.屬性動畫(Property Animation)


  • 屬性動畫有 ObjectAnimator档冬、ValueAnimator膘茎,常用的還是ObjectAnimator繼承于ValueAnimator
 AnimatorSet animatorSet = new AnimatorSet();///創(chuàng)建屬性動畫集
        animatorSet.playTogether(///“playTogether”表示所有的子動畫同時運(yùn)作
                ObjectAnimator.ofFloat(view, "rotationX", 0, 360),
                ObjectAnimator.ofFloat(view, "rotationY", 0, 180),
                ObjectAnimator.ofFloat(view, "rotation", 0, -90),
                ObjectAnimator.ofFloat(view, "translationX", 0, 90),
                ObjectAnimator.ofFloat(view, "translationY", 0, 90),
                ObjectAnimator.ofFloat(view, "scaleX", 1, 1.5f),
                ObjectAnimator.ofFloat(view, "scaleY", 1, 0.5f),
                ObjectAnimator.ofFloat(view, "alpha", 1, 0.25f, 1)
        );
        animatorSet.setDuration(5 * 1000).start();
  • 同樣Animator也可以寫XML來實現(xiàn)

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:ordering="sequentially">
    <objectAnimator
        android:duration="3000"
        android:propertyName="rotationX"
        android:repeatCount="infinite"
        android:repeatMode="reverse"
        android:startOffset="0"
        android:valueFrom="0"
        android:valueTo="360"
        android:valueType="intType" />


</set>

    AnimatorSet set = (AnimatorSet)             AnimatorInflater.loadAnimator(getApplicationContext(), R.animator.property_animator);
    set.setTarget(mView);//設(shè)置一下要動的目標(biāo)View
    set.start();


一般監(jiān)聽有
ObjectAnimator.ofArgb().addListener(new Animator.AnimatorListener() {
            @Override
            public void onAnimationStart(Animator animation) {
                //動畫開始
            }

            @Override
            public void onAnimationEnd(Animator animation) {
                //動畫結(jié)束
            }

            @Override
            public void onAnimationCancel(Animator animation) {
                //動畫取消
            }

            @Override
            public void onAnimationRepeat(Animator animation) {
                //重復(fù)動畫
            }
        });

        ObjectAnimator.ofFloat(view, "alpha", 1, 0.25f, 1).addUpdateListener(new ValueAnimator
                .AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                //動畫值更新通過 animation.getAnimatedValue()取得
                //這個更新值能讓我們做一些規(guī)律動畫
            }
        });
        
        

總結(jié)


  • AnimationSet 與 AnimatorSet 最大的不同在于,AnimationSet 使用的是 Animation 子類酷誓、AnimatorSet 使用的是 Animator 的子類披坏。

Animation 是針對視圖外觀的動畫實現(xiàn),動畫被應(yīng)用時外觀改變但視圖的觸發(fā)點不會發(fā)生變化盐数,還是在原來定義的位置棒拂。

Animator是針對視圖屬性的動畫實現(xiàn),動畫被應(yīng)用時對象屬性產(chǎn)生變化玫氢,最終導(dǎo)致視圖外觀變化帚屉。

  • 這一章講了一個動畫大概,下一章一起看看自定義動畫和場景動畫還有現(xiàn)在的流行的SVG動畫

有問題可以來我博客或者簡書反饋,謝謝大家的停留在這里時間

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末漾峡,一起剝皮案震驚了整個濱河市攻旦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌生逸,老刑警劉巖牢屋,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異槽袄,居然都是意外死亡烙无,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門遍尺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來截酷,“玉大人,你說我怎么就攤上這事乾戏∮乜粒” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵鼓择,是天一觀的道長灾部。 經(jīng)常有香客問我,道長惯退,這世上最難降的妖魔是什么赌髓? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上锁蠕,老公的妹妹穿的比我還像新娘夷野。我一直安慰自己,他們只是感情好荣倾,可當(dāng)我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布悯搔。 她就那樣靜靜地躺著,像睡著了一般舌仍。 火紅的嫁衣襯著肌膚如雪妒貌。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天铸豁,我揣著相機(jī)與錄音灌曙,去河邊找鬼。 笑死节芥,一個胖子當(dāng)著我的面吹牛在刺,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播头镊,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼蚣驼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了相艇?” 一聲冷哼從身側(cè)響起颖杏,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎坛芽,沒想到半個月后留储,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡靡馁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年欲鹏,在試婚紗的時候發(fā)現(xiàn)自己被綠了机久。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片臭墨。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖膘盖,靈堂內(nèi)的尸體忽然破棺而出胧弛,到底是詐尸還是另有隱情,我是刑警寧澤侠畔,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布结缚,位于F島的核電站,受9級特大地震影響软棺,放射性物質(zhì)發(fā)生泄漏红竭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望茵宪。 院中可真熱鬧最冰,春花似錦、人聲如沸稀火。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽凰狞。三九已至篇裁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間赡若,已是汗流浹背达布。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留斩熊,地道東北人往枣。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像粉渠,于是被迫代替她去往敵國和親分冈。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 1 背景 不能只分析源碼呀霸株,分析的同時也要整理歸納基礎(chǔ)知識雕沉,剛好有人微博私信讓全面說說Android的動畫,所以今...
    未聞椛洺閱讀 2,705評論 0 10
  • 在手機(jī)上去實現(xiàn)一些動畫效果算是件比較炫酷的事情去件,因此Android系統(tǒng)在一開始的時候就給我們提供了兩種實現(xiàn)動畫效果...
    Ten_Minutes閱讀 3,873評論 3 11
  • 仿佛又到了一個路口 又到了一個分開的季節(jié) 散場...
    禎至九思閱讀 231評論 0 3
  • 匆匆尤溜,何能聆聽時間流淌的妙音倔叼?忙忙,何能知曉小草的趣事宫莱?
    木易當(dāng)興閱讀 158評論 0 0
  • 昨兒個閱讀完《相親日記》后給了作者留言說丈攒,本下定決心明年初開始相親的,現(xiàn)在又不想相了授霸。作者趕緊安慰道:“別~相親成...
    吉吉安zyy閱讀 481評論 3 5