Android動(dòng)畫基礎(chǔ)

先上個(gè)動(dòng)畫小圖



Q:Android 中動(dòng)畫有幾類?

A:目前有三種:分別是補(bǔ)間動(dòng)畫、幀動(dòng)畫和屬性動(dòng)畫岁经。

tween補(bǔ)間動(dòng)畫
通過(guò)指定View的初末狀態(tài)和變化時(shí)間、方式蛇券,對(duì)View的內(nèi)容完成一系列的圖形變換來(lái)實(shí)現(xiàn)動(dòng)畫效果缀壤。

補(bǔ)間動(dòng)畫在細(xì)分可以分為漸變動(dòng)畫與轉(zhuǎn)換動(dòng)畫

漸變動(dòng)畫 轉(zhuǎn)換動(dòng)畫
alpha(AlphaAnimation) translate(TranslateAnimation)
scale(ScaleAnimation) rotate(RotetaAnimation)

對(duì)于xml中各個(gè)效果的屬性設(shè)定就不在詳細(xì)描述,放在下面屬性動(dòng)畫會(huì)提到

最后通過(guò)View.startAnimation()來(lái)為子類添加動(dòng)畫效果

frame幀動(dòng)畫
AnimationDrawable 控制 animation-list xml布局
xml中內(nèi)容展示
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false">
    <item android:drawable="@drawable/a_01" android:duration="50"/>
    <item android:drawable="@drawable/a_02" android:duration="50"/>
    <item android:drawable="@drawable/a_03" android:duration="50"/>
    <item android:drawable="@drawable/a_04" android:duration="50"/>
    <item android:drawable="@drawable/a_05" android:duration="50"/>
</animation-list>
Java中的代碼
imageview.setBackground(R.anim.anim);
AnimationDrawable anims = (AnimationDrawable)imageview.getBackground()
anims.start();

屬性動(dòng)畫(Propety Animation)

Duration動(dòng)畫持續(xù)時(shí)間纠亚,默認(rèn)300ms
Time interpolation 插補(bǔ)器塘慕,定義動(dòng)畫的變化率
Repeat count and behavior 重復(fù)次數(shù)、以及重復(fù)模式
Animator set 動(dòng)畫集合蒂胞,你可以定義一組動(dòng)畫图呢,一起執(zhí)行或者順序執(zhí)行
Frame refresh delay 幀刷新延遲,對(duì)于你的動(dòng)畫,多久刷新一次幀蛤织,默認(rèn)為10ms
相關(guān)類
ObejctAnimator 動(dòng)畫的執(zhí)行類
ValueAnimator 動(dòng)畫的執(zhí)行類
AnimatorSet 用于控制一組動(dòng)畫的執(zhí)行
TypeEvaluator 類型估值拥娄,主要用于設(shè)置動(dòng)畫操作屬性的值
TimeInterpolator 插補(bǔ)器

ObjectAnimator

ObjectAnimator.ofFloat(this,"rotationX",0.0f,360.0f).setDuration(500).start();

  1. 提供了ofInt、ofFloat瞳筏、ofObject,這幾個(gè)方法都是設(shè)置動(dòng)畫作用的元素稚瘾、作用的屬性、動(dòng)畫開始姚炕、結(jié)束中間的任意個(gè)屬性值摊欠。
ValueAnimator

ValueAnimator.ofFloat(0,100).setTarget(this).setDuration(1000).start();

監(jiān)聽動(dòng)畫的事件
  1. AnimatorUpdateListener
  2. AnimatorListener
  3. AnimatorListenerAdapter
AnimatorSet
ObjectAnimator anim1 = ObjectAnimator.ofFloat(this,"scaleX",1.0f,2f);
Objectanimator anim2 = ObjectAnimator.ofFloat(this,"scaleY",1.0f,2f);
AnimatorSet animSet = new AnimatorSet();
animSet.setDuration(1000);
animSet.setInterpolator(new LinearInterpolator());
animSet.playTogether(anim1,anim2);
animSet.start();
xml創(chuàng)建屬性動(dòng)畫
<ObjectAnimator xmlns:android="http://schema.android.com/apk/res/android"
    android:duration="1000"
    android:propertyName="scaleX"
    android:valueFrom="1.0"
    android:valueTo="2.0"
    android:valueType="floatType"
/>
    
AnimatorInflater.loadAnimator(this,R.animator.scalex)
.setTarget(mMv)
.start();

overridePendingTransition activity轉(zhuǎn)場(chǎng)動(dòng)畫效果

Material Design中的Transaction動(dòng)畫
Ripple Effect

MD中在用戶觸摸屏幕時(shí)提供反饋,有助于視覺(jué)交流柱宦,形成互動(dòng)些椒。可以通過(guò)如下代碼設(shè)置波紋的背景:

android:background="?android:attr/selectableItemBackground"   //默認(rèn)選項(xiàng)掸刊,在視圖范圍內(nèi)展示波紋效果
android:backgournd="?android:attr/selecableItemBackgroundBorderless"  //可選項(xiàng)免糕,將波紋延伸到視圖之外
android:background="@drawable/customRipple" //自定義背景的ripple effect

customRipple.xml

<ripple xmlns:android="http:schemas.android.com/apk/res/androdi"
android:color="#c9352a"
>

<item>
    <shape android:shape="rectangle">
        <solid android:color="#02cce7"/>
        <corners android:radius="4dp"/>
    </shape>
</item>

</ripple>

這里通過(guò)幾個(gè)button的點(diǎn)擊效果可以直觀的感受下ripples

Circular Reveal

簡(jiǎn)單翻譯來(lái)說(shuō)稱之為圓形展現(xiàn)

ViewAnimationUtil.createCircularReveal(View view,int centerX,int centerY,float startRadius,float endRadius).start()
  • centerX –點(diǎn)擊視圖的 X軸中心;
  • centerY -點(diǎn)擊視圖的 Y軸中心忧侧;
  • view –要顯示的視圖石窑;
  • startRadius 動(dòng)畫開始半徑
  • startRadius 動(dòng)畫結(jié)束半徑
Transitions
Interpolators
  • enter 決定活動(dòng)視圖如何進(jìn)入場(chǎng)景
  • exit 決定活動(dòng)視圖如何退出場(chǎng)景
  • reenter 決定活動(dòng)試圖退出后如何再度進(jìn)入場(chǎng)景
  • shared elements 決定活動(dòng)間如何共享視圖轉(zhuǎn)換
VectorDrawable
  • Height & Width –矢量圖像的實(shí)際大小蚓炬;
  • Viewport Height & Width –聲明描述矢量路徑的虛擬畫布的大兴裳贰;
  • Group name –聲明路徑所屬的組名肯夏;
  • Pivot X & Y –聲明群組規(guī)模和旋轉(zhuǎn)所使用的中心點(diǎn)经宏;
  • Path Fill Color –描述矢量路徑的填充色;
  • Path Data –聲明用于繪制矢量的矢量路徑數(shù)據(jù)驯击。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末烁兰,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子徊都,更是在濱河造成了極大的恐慌沪斟,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件碟贾,死亡現(xiàn)場(chǎng)離奇詭異币喧,居然都是意外死亡轨域,警方通過(guò)查閱死者的電腦和手機(jī)袱耽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)干发,“玉大人朱巨,你說(shuō)我怎么就攤上這事⊥鞒ぃ” “怎么了冀续?”我有些...
    開封第一講書人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵琼讽,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我洪唐,道長(zhǎng)钻蹬,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任凭需,我火速辦了婚禮问欠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘粒蜈。我一直安慰自己顺献,他們只是感情好蘑拯,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開白布兜蠕。 她就那樣靜靜地躺著,像睡著了一般宵溅。 火紅的嫁衣襯著肌膚如雪度硝。 梳的紋絲不亂的頭發(fā)上肿轨,一...
    開封第一講書人閱讀 49,772評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音蕊程,去河邊找鬼萝招。 笑死,一個(gè)胖子當(dāng)著我的面吹牛存捺,可吹牛的內(nèi)容都是我干的槐沼。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼捌治,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼岗钩!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起肖油,我...
    開封第一講書人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤兼吓,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后森枪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體视搏,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年县袱,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了浑娜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡式散,死狀恐怖筋遭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤漓滔,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布编饺,位于F島的核電站,受9級(jí)特大地震影響响驴,放射性物質(zhì)發(fā)生泄漏透且。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一豁鲤、第九天 我趴在偏房一處隱蔽的房頂上張望石蔗。 院中可真熱鬧,春花似錦畅形、人聲如沸养距。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)棍厌。三九已至,卻和暖如春竖席,著一層夾襖步出監(jiān)牢的瞬間耘纱,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工毕荐, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留束析,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓憎亚,卻偏偏與公主長(zhǎng)得像员寇,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子第美,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

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

  • 【Android 動(dòng)畫】 動(dòng)畫分類補(bǔ)間動(dòng)畫(Tween動(dòng)畫)幀動(dòng)畫(Frame 動(dòng)畫)屬性動(dòng)畫(Property ...
    Rtia閱讀 6,115評(píng)論 1 38
  • 為什么要引入屬性動(dòng)畫 逐幀動(dòng)畫主要是用來(lái)實(shí)現(xiàn)動(dòng)畫的蝶锋,而補(bǔ)間動(dòng)畫才能實(shí)現(xiàn)控件的漸入漸出、移動(dòng)什往、旋轉(zhuǎn)和縮放效果扳缕;屬性動(dòng)...
    凌川江雪閱讀 556評(píng)論 0 3
  • 1 背景 不能只分析源碼呀,分析的同時(shí)也要整理歸納基礎(chǔ)知識(shí)别威,剛好有人微博私信讓全面說(shuō)說(shuō)Android的動(dòng)畫躯舔,所以今...
    未聞椛洺閱讀 2,697評(píng)論 0 10
  • 學(xué)習(xí)資料:Android開發(fā)藝術(shù)探索和Animation的api 1.屬性動(dòng)畫 屬性動(dòng)畫可以對(duì)任意對(duì)象的屬性進(jìn)行動(dòng)...
    英勇青銅5閱讀 1,981評(píng)論 0 22
  • 作者卡洛.羅韋利是意大利著名物理學(xué)家,圈量子引力理論開創(chuàng)者之一省古,本書的內(nèi)容是量子物理研究的新進(jìn)展粥庄,它顛覆了對(duì)時(shí)間的...
    瞰川閱讀 3,931評(píng)論 0 3