Android動畫的靈魂舞曲(二)

視圖動畫(View Animation)

視圖動畫中有兩個類型:

1、漸變動畫(Tween animation)
2筑凫、幀動畫(Frame animation)

1、漸變動畫(Tween animation)實現(xiàn)

通過創(chuàng)建一個動畫來對一個圖像或視圖執(zhí)行一系列的轉換。如旋轉,漸變五鲫,移動和拉伸。

先來看看一些xml屬性的解釋:

<set>
包裹其他動畫元素(<alpha>, <scale>, <translate>, <rotate>)或其他<set>元素岔擂,java代碼中為AnimationSet。

attributes description
android:interpolator: 插值器
android:shareInterpolator boolean值浪耘,為true的時候將同一個插值器共享到每個子元素中

<alpha>
一個淡入淡出的動畫乱灵,java代碼中是AlphaAnimation。

attributes description
android:fromAlpha float型七冲,起點的透明度痛倚,從0.0-1.0
android:toAlpha float型,終點的透明度澜躺,從0.0-1.0

<scale>
一個縮放動畫蝉稳,java代碼中是ScaleAnimation。

attributes description
android:fromXScale float掘鄙,動畫開始時基于原圖像X軸方向的比例耘戚,1.0是沒有變化,0就是無
android:toXScale float操漠,動畫結束時基于原圖像X軸方向的比例收津,1.0是沒有變化,0就是無
android:fromYScale float浊伙,動畫開始時基于原圖像Y軸方向的比例撞秋,1.0是沒有變化,0就是無
android:toYScale float嚣鄙,動畫結束時基于原圖像Y軸方向的比例吻贿,1.0是沒有變化,0就是無
android:pivotX 動畫的起點X軸位置哑子,有三種類型舅列,基于像素大小肌割,基于自身大小,基于父容器大小剧蹂。(基于控件左上角為原點声功,50、50%宠叼、50%p-分別指的是坐標50px先巴,視圖X軸方向長度的一半,父布局的一半)
android:pivotY 動畫的起點Y軸位置冒冬,與pivotX類型一致伸蚯,換成Y軸方向

<translate>
一個位移動畫,java代碼中是TranslateAnimation简烤。

attributes description
android:fromXDelta 動畫X軸開始的起點剂邮,有三種類型,基于像素大小横侦,基于自身大小挥萌,基于父容器大小。(基于控件左上角為原點枉侧,50、50%榨馁、50%p-分別指的是坐標50px憨栽,視圖X軸方向長度的一半,父布局的一半)
android:toXDelta 動畫X軸結束的起點翼虫,類型與上訴一致
android:fromYDelta 動畫Y軸開始的起點
android:toYDelta 動畫Y軸結束的起點

<rotate>
一個旋轉動畫屑柔,java代碼中是RotateAnimation。計算旋轉量珍剑,toDegrees -fromDegrees的角度就是旋轉量(負數(shù)是逆時針掸宛,正數(shù)是順時針)。0度是手機的豎直方向次慢。

attributes description
android:fromDegrees float旁涤,開始旋轉的角度(負數(shù)是逆時針,正數(shù)是順時針)
android:toDegrees float迫像,結束旋轉的角度劈愚,同上
android:pivotX 旋轉的點的X軸坐標(基于控件左上角為原點,50闻妓、50%菌羽、50%p-分別指的是坐標50px,視圖X軸方向長度的一半由缆,父布局的一半)
android:pivotY 旋轉的點的Y軸坐標

以上的xml在對應的對象中都有相應的getter和setter方法來獲取屬性和設置屬性注祖。

xml實現(xiàn)

大概了解了上面的屬性后猾蒂,我們要開始來點實戰(zhàn)來實現(xiàn)這些個屬性。

視圖動畫文件

xml配置文件:

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false"
    android:duration="5000">
    <alpha
        android:fromAlpha="0.0"
        android:toAlpha="1.0" />
    <scale
        android:fromXScale="0"
        android:fromYScale="0"
        android:toXScale="1.0"
        android:toYScale="1.0"
        android:pivotX="50%"
        android:pivotY="50%" />
    <translate
        android:fromXDelta="0"
        android:fromYDelta="0"
        android:toXDelta="500"
        android:toYDelta="500" />
    <!-- 0度是豎直狀態(tài) -->
    <rotate
        android:fromDegrees="0"
        android:toDegrees="270"
        android:pivotX="50%" 
       android:pivotY="50%"/>
</set>

java代碼:

AnimationSet animSet = (AnimationSet) AnimationUtils.loadAnimation(context, R.anim.anim_set);
moveBtn.startAnimation(animSet);

只需要通過以上步驟我們就能夠實現(xiàn)壓縮動畫了是晨。在這里解釋下對于setAnimation()和startAnimation()的區(qū)別肚菠,如下圖:設置下一條要播放的動畫,若是需要立即播放動畫罩缴,使用startAnimation()蚊逢。而setAnimation()這種方法提供了允許細粒度的控制開始時間和無效,但是必須確保1)動畫有一組開始時間,和2)視圖的父(控制動畫在兒童)將動畫應該開始時失效。該方法的是需要一定的條件才能觸發(fā)的箫章。

谷歌官方文檔setAnimation()說明.png

java代碼實現(xiàn):

我先放幾張圖烙荷,讓大家了解相關的類:


Paste_Image.png

AlphaAnimation構造函數(shù)

AnimationSet構造函數(shù)

RotateAnimation構造函數(shù)

ScaleAnimation構造函數(shù)

TranslateAnimation構造函數(shù)

其實這幾種動畫的構造函數(shù)都是需要在實例化對象的將值傳遞進去的。而后在實例化對象后檬寂,直接讓視圖調用startAnimation()即可终抽。

translate animation
TranslateAnimation
rotate animation
RotateAnimation
scale animation
ScaleAnimation
alpha animation
device-2016-08-31-215431.gif
animation-set
Animation-set

2、幀動畫(Frame animation)實現(xiàn)

將圖片像電影一樣按順序播放桶至。

<animation-list>
該標簽必須是根標簽昼伴,包裹<item>

attributes description
android:oneshot boolean,是否只播放一次镣屹,false-否亩码,true-只播放一次

<item>
一個動畫的單幀,必須是<animation-list>的子元素

attributes description
android:drawable int野瘦,圖片資源
android:duration Integer,動畫播放時間

xml實現(xiàn)

幀動畫的文件放在/res/drawable中飒泻。


animation-list文件
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false">
    <item
        android:drawable="@drawable/dog"
        android:duration="500" />
    <item
        android:drawable="@drawable/cat_dog"
        android:duration="500" />
</animation-list>

java代碼:

Drawable drawable = context.getDrawable(R.drawable.list_anim);
imageView.setBackground(drawable);
AnimationDrawable animationDrawable = (AnimationDrawable) imageView.getBackground();
animationDrawable.start();

java代碼實現(xiàn)

AnimationDrawable animDrawable = new AnimationDrawable();
animDrawable.addFrame(getDrawable(R.drawable.cat_dog), 200);
animDrawable.addFrame(getDrawable(R.drawable.dog), 200);
imageView.setBackground(animDrawable);
animDrawable.start();
animation-list
Animation-list

以上就是視圖動畫的學習總結鞭光,總結出來可能有遺漏或者錯誤,歡迎指正~
個人總結泞遗。轉載請注明出處~http://www.reibang.com/p/78f5987d01b6

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末惰许,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子史辙,更是在濱河造成了極大的恐慌汹买,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件聊倔,死亡現(xiàn)場離奇詭異晦毙,居然都是意外死亡,警方通過查閱死者的電腦和手機耙蔑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門见妒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人甸陌,你說我怎么就攤上這事须揣⊙喂桑” “怎么了?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵耻卡,是天一觀的道長疯汁。 經(jīng)常有香客問我,道長卵酪,這世上最難降的妖魔是什么幌蚊? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮凛澎,結果婚禮上霹肝,老公的妹妹穿的比我還像新娘。我一直安慰自己塑煎,他們只是感情好沫换,可當我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著最铁,像睡著了一般讯赏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上冷尉,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天漱挎,我揣著相機與錄音,去河邊找鬼雀哨。 笑死磕谅,一個胖子當著我的面吹牛,可吹牛的內容都是我干的雾棺。 我是一名探鬼主播膊夹,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼捌浩!你這毒婦竟也來了放刨?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤尸饺,失蹤者是張志新(化名)和其女友劉穎进统,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體浪听,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡螟碎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了馋辈。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片抚芦。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出叉抡,到底是詐尸還是另有隱情尔崔,我是刑警寧澤,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布褥民,位于F島的核電站季春,受9級特大地震影響,放射性物質發(fā)生泄漏消返。R本人自食惡果不足惜载弄,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望撵颊。 院中可真熱鬧宇攻,春花似錦、人聲如沸倡勇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽妻熊。三九已至夸浅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間扔役,已是汗流浹背帆喇。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留亿胸,地道東北人坯钦。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像侈玄,于是被迫代替她去往敵國和親葫笼。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,781評論 2 354

推薦閱讀更多精彩內容