Android動(dòng)畫之視圖動(dòng)畫

補(bǔ)間動(dòng)畫

可以使用補(bǔ)間動(dòng)畫系統(tǒng)執(zhí)行補(bǔ)間動(dòng)畫。補(bǔ)間動(dòng)畫計(jì)算動(dòng)畫相關(guān)的信息包括開(kāi)始點(diǎn)、結(jié)束點(diǎn)、大小城菊、旋轉(zhuǎn)角度以及其他與動(dòng)畫相關(guān)的共同點(diǎn)。

一個(gè)補(bǔ)間動(dòng)畫能執(zhí)行一系列簡(jiǎn)單的變換(位置碉克、大小凌唬、旋轉(zhuǎn)角度和透明度)關(guān)于一個(gè)視圖對(duì)象的屬性。所以漏麦,如果有一個(gè)TextView客税,你可以讓文本移動(dòng)、旋轉(zhuǎn)撕贞、放大更耻、縮小。如果有背景圖片麻掸,背景圖片將和文本一起被變換酥夭。

補(bǔ)間動(dòng)畫可以通過(guò)XML文件或Android代碼赐纱,推薦使用XML文件脊奋。因?yàn)榭勺x性更好,重用性更好疙描,比硬編碼更好替換诚隙。

每一個(gè)變換獲得一個(gè)具體變換的參數(shù)集合(開(kāi)始大小,結(jié)束大小起胰,開(kāi)始角度久又,結(jié)束角度等等)和一些常見(jiàn)的參數(shù)(開(kāi)始時(shí)間巫延,時(shí)長(zhǎng))。為了使幾個(gè)變換同時(shí)開(kāi)始地消,使它們的開(kāi)始時(shí)間相同炉峰;為了順序執(zhí)行,讓開(kāi)始時(shí)間加上變換執(zhí)行的時(shí)間脉执。

補(bǔ)間動(dòng)畫的XML文件放在res/anim目錄下疼阔。該文件有位移根元素<alpha>,<scale>,<translate>,<rotate>,插值器元素或<set>半夷。為了使變換順序執(zhí)行婆廊,必須設(shè)置startOffset屬性。如下:

exam1

屏幕坐標(biāo):左上角為(0,0)巫橄,向右淘邻、向下增加。

一些值湘换,比如pointX,能規(guī)定相對(duì)自身或者相對(duì)父控件的關(guān)系宾舅。根據(jù)需要選擇合適的格式(50為相對(duì)父控件的50%,50%為相對(duì)自身的50%)枚尼。

代碼調(diào)用res/anim目錄下的hyperspace_jump.xml動(dòng)畫:

ImageView spaceshipImage=(ImageView)findViewById(R.id.spaceshipImage);

Animation hyperspaceJumpAnimation=AnimationUtils.loadAnimation(this,R.anim.hyperspace_jump);

spaceshipImage.startAnimation(hyperspaceJumpAnimation);

startAnimation()可以使用如下方式替代:

給動(dòng)畫設(shè)置一個(gè)開(kāi)始時(shí)間Animation.setStartTime(),然后給視圖設(shè)置動(dòng)畫View.setAnimation()贴浙。


透明度動(dòng)畫:

XML:res/anim/anim_alpha.xml

<alpha

??????? android:duration="300"

??????? android:fromAlpha="0.0"

??????? android:toAlpha="1.0"/>

Animation animation=AnimationUtils.loadAnimation(this,R.anim.anim_alpha);

imageView.startAnimation(animation);

注:

fromAlpha:動(dòng)畫開(kāi)始時(shí)的透明度;0.0透明署恍,1.0不透明崎溃。

toAlpha:動(dòng)畫結(jié)束時(shí)透明度;0.0透明盯质,1.0不透明袁串。

Android Code:

AlphaAnimation localAlphaAnimation =new AlphaAnimation(0.0,1.0);

localAlphaAnimation.setDuration(300);

imageView.startAnimation(localAlphaAnimation);


縮放動(dòng)畫:

XML:res/anim/anim_scale.xml

<scale

??????? android:duration="300"

??????? android:fromXScale="0.0"

??????? android:fromYScale="0"

??????? android:pivotX="50%"

??????? android:pivotY="50%"

??????? android:toXScale="1.0"

??????? android:toYScale="1.0"/>


Animation animation=AnimationUtils.loadAnimation(this,R.anim.anim_scale);

imageView.startAnimation(animation);

注:

fromXScale:開(kāi)始時(shí)橫向(X軸)的大小呼巷;1.0指沒(méi)有改變囱修。fromYScale同理。

toXScale:動(dòng)畫結(jié)束時(shí)縱向(Y軸)的大型鹾贰破镰;1.0指沒(méi)有改變。toYScale同理压储。

pivotX:對(duì)象縮放時(shí)鲜漩,X軸坐標(biāo)保持不變的位置。pivotY同理集惋。

Android Code:

ScaleAnimation localScaleAnimation =new ScaleAnimation(0.0,1.0,0.0,1,0.5F,0.5F);

localScaleAnimation.setDuration(300);

imageView.startAnimation(localScaleAnimation);


旋轉(zhuǎn)動(dòng)畫:

XML:res/anim/anim_rotate.xml

<rotate

??????? android:duration="300"

??????? android:fromDegrees="0.0"

??????? android:toDegrees="90.0"

??????? android:pivotX="50%"

??????? android:pivotY="50%"/>

Animation animation=AnimationUtils.loadAnimation(this,R.anim.anim_rotate);

imageView.startAnimation(animation);

Android Code:

RotateAnimation rotateAnimation=new RotateAnimation(0.0, 90.0, 50%, 50%);

rotateAnimation.setDuration(300);

imageView.startAnimation(rotateAnimation);

注:

構(gòu)造函數(shù):RotateAnimation(float fromDegrees, float toDegrees, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)

pivotXType:用于描述pivotXValue的類型孕似。

Animation.ABSOLUTE, 一個(gè)具體的數(shù)值;

Animation.RELATIVE_TO_SELF,相對(duì)自身的百分比刮刑;

Animation.RELATIVE_TO_PARENT喉祭,相對(duì)父控件的百分比养渴。

pivotXValue:一個(gè)具體的值后百分比,含義由pivotXType決定泛烙。


位移動(dòng)畫:

XML:res/anim/anim_translate.xml

<translate

??????? android:fromXDelta="0%"

??????? android:toXDelta="100%"

??????? android:duration="300"/>

Animation animation=AnimationUtils.loadAnimation(this,R.anim.anim_translate);

imageView.startAnimation(animation);

注:

fromXDelta:浮點(diǎn)數(shù)與百分比理卑,開(kāi)始時(shí)X軸的偏移量。表達(dá)方式:使用像素相對(duì)于正常位置蔽氨,如:"5"傻工;使用百分比相對(duì)于元素自身的寬度,如"5%",或者相對(duì)于父控件的寬度孵滞,如"5%p"中捆。formYDelta同理。

toXDelta:結(jié)束時(shí)X軸的偏移量坊饶。toYDelta 同理泄伪。


Android Code:

TranslateAnimation translateAnimation=new TranslateAnimation(Animation.RELATIVE_TO_SELF,0.0f, Animation.RELATIVE_TO_SELF,1.0f,Animation.RELATIVE_TO_SELF,0.0f, Animation.RELATIVE_TO_SELF,0.0f);

translateAnimation.setDuration(300);

imageView.startAnimation(translateAnimation);


動(dòng)畫循環(huán):

circu_anim

注:

duration:動(dòng)畫持續(xù)的時(shí)間,毫秒匿级;

fillAfter:動(dòng)畫結(jié)束時(shí)蟋滴,是否停在最后一幀;

fillBefore:動(dòng)畫結(jié)束時(shí)痘绎,是否停留在第一幀津函;

repeatCount:動(dòng)畫循環(huán)的次數(shù),默認(rèn)為 0 次不循環(huán)孤页,-1 (Animation.INFINITE)為無(wú)限循環(huán)尔苦;

repeatMode:循環(huán)的模式,Animation.REVERSE是從一次動(dòng)畫結(jié)束開(kāi)始行施,Animation.RESTART是從動(dòng)畫的開(kāi)始處循環(huán)允坚;

interpolator:插值器。



插值器( Interpolators)

下面的表指定每個(gè)插值器使用的資源:

interpolator

在XML文件中蛾号,通過(guò)android:interpolator屬性使用稠项。如:

<set android:interpolator="@android:anim/accelerate_interpolator">

...

</set>

Android Code:

RotateAnimation rotateAnimation=newRotateAnimation(0.0, 90.0, 50%, 50%);

rotateAnimation.setDuration(300);

rotateAnimation.setInterpolator(new AccelerateInterpolator());//越轉(zhuǎn)越快

imageView.startAnimation(rotateAnimation);

插值器效果:

AccelerateDecelerateInterpolator():開(kāi)始和結(jié)束慢,中間加速鲜结。

AccelerateInterpolator():剛開(kāi)始慢展运,一直加速。

AnticipateInterpolator():開(kāi)始落后精刷,然后急速向前拗胜。

AnticipateOvershootInterpolator():開(kāi)始落后,然后急速向前贬养,超過(guò)目標(biāo)值挤土,再回到目標(biāo)值琴庵。

BounceInterpolator():最后反彈误算。

CycleInterpolator(float cycles):循環(huán)指定的次數(shù)仰美,速率隨正弦曲線變化。

DecelerateInterpolator()儿礼、DecelerateInterpolator(float factor):一開(kāi)始快咖杂,然后減速;factor:速度差的程度蚊夫。

LinearInterpolator():速率不變诉字。

OvershootInterpolator()、OvershootInterpolator(float tension):急速向前知纷,超過(guò)目標(biāo)值壤圃,然后返回;tension:超過(guò)的量琅轧。

問(wèn)題:

進(jìn)過(guò)補(bǔ)間動(dòng)畫變換的對(duì)象只是外表(大小伍绳、位置、透明度等)發(fā)生了改變乍桂,對(duì)象的本來(lái)屬性并未改變冲杀,事件響應(yīng)的位置也為改變。
























最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末睹酌,一起剝皮案震驚了整個(gè)濱河市权谁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌憋沿,老刑警劉巖旺芽,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異辐啄,居然都是意外死亡甥绿,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門则披,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)共缕,“玉大人,你說(shuō)我怎么就攤上這事士复⊥脊龋” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵阱洪,是天一觀的道長(zhǎng)便贵。 經(jīng)常有香客問(wèn)我,道長(zhǎng)冗荸,這世上最難降的妖魔是什么承璃? 我笑而不...
    開(kāi)封第一講書人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮蚌本,結(jié)果婚禮上盔粹,老公的妹妹穿的比我還像新娘隘梨。我一直安慰自己,他們只是感情好舷嗡,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布轴猎。 她就那樣靜靜地躺著,像睡著了一般进萄。 火紅的嫁衣襯著肌膚如雪捻脖。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 49,829評(píng)論 1 290
  • 那天中鼠,我揣著相機(jī)與錄音可婶,去河邊找鬼。 笑死援雇,一個(gè)胖子當(dāng)著我的面吹牛扰肌,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播熊杨,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼曙旭,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了晶府?” 一聲冷哼從身側(cè)響起桂躏,我...
    開(kāi)封第一講書人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎川陆,沒(méi)想到半個(gè)月后剂习,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡较沪,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年鳞绕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片尸曼。...
    茶點(diǎn)故事閱讀 38,654評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡们何,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出控轿,到底是詐尸還是另有隱情冤竹,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布茬射,位于F島的核電站鹦蠕,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏在抛。R本人自食惡果不足惜钟病,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧肠阱,春花似錦票唆、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)磨德。三九已至缘回,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間典挑,已是汗流浹背酥宴。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留您觉,地道東北人拙寡。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像琳水,于是被迫代替她去往敵國(guó)和親肆糕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349

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