Android自定義視圖動(dòng)畫

本文介紹了View動(dòng)畫的各種效果缝呕,并實(shí)現(xiàn)自定義動(dòng)畫的效果诸尽。主要包括以下部分:

? ? ? ? 1.view動(dòng)畫-透明動(dòng)畫效果(AlphaAnimation)

? ? ? ? 2.View動(dòng)畫-旋轉(zhuǎn)動(dòng)畫效果(RotateAnimation)

? ? ? ? 3.View動(dòng)畫-移動(dòng)動(dòng)畫效果(TranslateAnimation)

? ? ? ? 4.View動(dòng)畫-縮放動(dòng)畫效果(ScaleAnimation)

? ? ? ? 5.View動(dòng)畫-動(dòng)畫效果的混合

? ? ? ? 6.View動(dòng)畫-動(dòng)畫效果的偵聽

? ? ? ? 7.View動(dòng)畫-自定義動(dòng)畫效果

詳細(xì)代碼:github.com/Baolvlv/LearnAndroid/tree/master/ViewAnimation

1.view動(dòng)畫-透明動(dòng)畫效果(AlphaAnimation)

對(duì)button設(shè)置事件監(jiān)聽器后,可以通過代碼或xml文件的方式,添加透明動(dòng)畫效果

(1)通過代碼的方式添加動(dòng)畫

//設(shè)置透明動(dòng)畫,透明度0-1

AlphaAnimation aa =newAlphaAnimation(0,1);

//設(shè)置動(dòng)畫的時(shí)間長(zhǎng)度

aa.setDuration(1000);

v.startAnimation(aa);

(2)通過xml文件的方式

在res文件夾下,新建anim文件夾车猬,在anim文件夾下新建 animation resource file,建立alpha標(biāo)簽,編寫透明動(dòng)畫的效果

http://schemas.android.com/apk/res/android">

android:toAlpha="1"

android:duration="1000">

而后在事件監(jiān)聽器中尺锚,添加xml的動(dòng)畫效果

v.startAnimation(AnimationUtils.loadAnimation(getApplication(),R.anim.aa));

2.View動(dòng)畫-旋轉(zhuǎn)動(dòng)畫效果(RotateAnimation)

(1)通過代碼的方式添加動(dòng)畫

初始化RotateAnimation變量珠闰,設(shè)置旋轉(zhuǎn)角度與旋轉(zhuǎn)中心

ra=newRotateAnimation(0,360,100,50);//后兩個(gè)參數(shù)為中心點(diǎn)的像素

//設(shè)置相對(duì)于控件自身中心點(diǎn)(比例 0.5f)

ra=newRotateAnimation(0,360,RotateAnimation.RELATIVE_TO_SELF,0.5f,RotateAnimation.RELATIVE_TO_SELF,0.5f);

//設(shè)置動(dòng)畫時(shí)間為1秒

ra.setDuration(1000);

在事件監(jiān)聽器中開始動(dòng)畫

v.startAnimation(ra);

(2)通過xml文件的方式

在res文件夾下,新建anim文件夾瘫辩,在anim文件夾下新建 animation resource file,建立rotate標(biāo)簽铸磅,編寫旋轉(zhuǎn)動(dòng)畫的效果

http://schemas.android.com/apk/res/android">

android:toDegrees="360"

android:duration="1000"

android:pivotX="50%"

android:pivotY="50%">

在事件監(jiān)聽器中開始動(dòng)畫

v.startAnimation(AnimationUtils.loadAnimation(getApplication(),R.anim.ra));

3.View動(dòng)畫-移動(dòng)動(dòng)畫效果(TranslateAnimation)

(1)通過代碼的方式添加動(dòng)畫

初始化TranslateAnimation變量赡矢,設(shè)置相對(duì)于自身初始位置的位移量

//相對(duì)于當(dāng)前自身位置移動(dòng)一個(gè)增量

ta=newTranslateAnimation(0,200,0,200);

ta.setDuration(1000);

在事件監(jiān)聽器中開始動(dòng)畫

v.startAnimation(ta);

(2)通過xml文件的方式

在res文件夾下,新建anim文件夾阅仔,在anim文件夾下新建 animation resource file,建立translate標(biāo)簽吹散,編寫位移動(dòng)畫的效果

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

android:fromXDelta="0"

android:toXDelta="200"

android:fromYDelta="0"

android:toYDelta="200"

android:duration="1000">

在事件監(jiān)聽器中開始動(dòng)畫

v.startAnimation(AnimationUtils.loadAnimation(MainActivity.this,R.anim.ta));

4.View動(dòng)畫-縮放動(dòng)畫效果(ScaleAnimation)

(1)通過代碼的方式添加動(dòng)畫

初始化ScaleAnimation變量,設(shè)置縮放比例與縮放中點(diǎn)位置

//相對(duì)于控件自身的(100八酒,50)像素位置空民,從原大小放大至兩倍

sa=newScaleAnimation(1,2,1,2,100,50);

//相對(duì)于自身位置中心點(diǎn)從0放大到1

sa=newScaleAnimation(0,1,0,1,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);

sa.setDuration(1000);

在事件監(jiān)聽器中開始動(dòng)畫

v.startAnimation(sa);

(2)通過xml文件的方式

在res文件夾下,新建anim文件夾羞迷,在anim文件夾下新建 animation resource file,建立scale標(biāo)簽界轩,編寫位縮放畫的效果

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

android:fromXScale="0"

android:toXScale="1"

android:fromYScale="0"

android:toYScale="1"

android:pivotX="50%"

android:pivotY="50%"

android:duration ="1000">

在事件監(jiān)聽器中開始動(dòng)畫

v.startAnimation(AnimationUtils.loadAnimation(MainActivity.this,R.anim.sa));

5.View動(dòng)畫-動(dòng)畫效果的混合

(1)通過代碼的方式添加動(dòng)畫

初始化AnimationSet類的對(duì)象as

//AnimationSet可儲(chǔ)存多個(gè)動(dòng)畫

privateAnimationSetas;

實(shí)例化as,設(shè)置動(dòng)畫補(bǔ)間

//是否共用動(dòng)畫補(bǔ)間:true衔瓮;動(dòng)畫補(bǔ)間:動(dòng)畫是加速還是勻速執(zhí)行

as=newAnimationSet(true);

as.setDuration(1000);

其余每個(gè)單獨(dú)動(dòng)畫與原來(lái)設(shè)置一樣浊猾,設(shè)置完后添入AnimationSet中

AlphaAnimation aa =newAlphaAnimation(0,1)

aa.setDuration(1000);

as.addAnimation(aa);

TranslateAnimation ta =newTranslateAnimation(200,0,200,0);

ta.setDuration(1000);

as.addAnimation(ta);

在事件監(jiān)聽器中開始動(dòng)畫

v.startAnimation(as);

(2)通過xml文件的方式

在res文件夾下,新建anim文件夾热鞍,在anim文件夾下新建 animation resource file,建立set主標(biāo)簽葫慎,設(shè)置動(dòng)畫補(bǔ)間與動(dòng)畫時(shí)間。在主標(biāo)簽下分別編寫每個(gè)動(dòng)畫的標(biāo)簽薇宠,并完成相關(guān)設(shè)置

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

android:shareInterpolator="true"

android:duration="1000">

android:toAlpha="1"/>

android:toXDelta="0"

android:fromYDelta="200"

android:toYDelta="0"/>

在事件監(jiān)聽器中開始動(dòng)畫

v.startAnimation(AnimationUtils.loadAnimation(MainActivity.this,R.anim.anim));

6.View動(dòng)畫-動(dòng)畫效果的偵聽

通過對(duì)Animation對(duì)象setAnimationListener,對(duì)動(dòng)畫效果進(jìn)行偵聽偷办,會(huì)override動(dòng)畫開始,動(dòng)畫結(jié)束與動(dòng)畫重復(fù)三個(gè)函數(shù)澄港,在相應(yīng)的函數(shù)中完成操作

Animation a = AnimationUtils.loadAnimation(MainActivity.this,R.anim.anim);

a.setAnimationListener(newAnimation.AnimationListener() {

@Override

public voidonAnimationStart(Animation animation) {

}

@Override

public voidonAnimationEnd(Animation animation) {

Toast.makeText(MainActivity.this,"Animation end",Toast.LENGTH_SHORT).show();

}

@Override

public voidonAnimationRepeat(Animation animation) {

}

});

7.View動(dòng)畫-自定義動(dòng)畫效果

自定義一個(gè)類繼承自Animation,override initialize方法與applyTransformation方法

//獲取目標(biāo)容器于父級(jí)容器的寬高

@Override

public voidinitialize(intwidth, intheight, intparentWidth, intparentHeight) {

super.initialize(width,height,parentWidth,parentHeight);

//在動(dòng)畫開始時(shí)椒涯,initialize方法先執(zhí)行,獲取到目標(biāo)對(duì)象的寬高

//設(shè)置變化形態(tài)

@Override

protected voidapplyTransformation(floatinterpolatedTime,Transformation t) {

//參數(shù)interpolatedTime為補(bǔ)間時(shí)間回梧,動(dòng)畫開始時(shí)為0废岂,結(jié)束時(shí)為1,動(dòng)畫過程中從0到1變化

//參數(shù)Transformation可以設(shè)置變化的形態(tài), 如設(shè)置透明

//t.setAlpha(interpolatedTime);

//設(shè)置其他的變化getMatrix

// 用最終位置乘interpolatedTime,進(jìn)行到最終位置的緩慢移位

// t.getMatrix().setTranslate(200*interpolatedTime,200*interpolatedTime);

//以10為振幅的左右周期震動(dòng)

t.getMatrix().setTranslate((float) (Math.sin(interpolatedTime*10)*10),0);

super.applyTransformation(interpolatedTime,t);

而后在主activity中實(shí)例化類狱意,在事件監(jiān)聽器中startAnimation即可

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末泪喊,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子髓涯,更是在濱河造成了極大的恐慌,老刑警劉巖哈扮,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件纬纪,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡滑肉,警方通過查閱死者的電腦和手機(jī)包各,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)靶庙,“玉大人问畅,你說我怎么就攤上這事。” “怎么了护姆?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵矾端,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我卵皂,道長(zhǎng)秩铆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任灯变,我火速辦了婚禮殴玛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘添祸。我一直安慰自己滚粟,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布刃泌。 她就那樣靜靜地躺著凡壤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蔬咬。 梳的紋絲不亂的頭發(fā)上鲤遥,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音林艘,去河邊找鬼盖奈。 笑死,一個(gè)胖子當(dāng)著我的面吹牛狐援,可吹牛的內(nèi)容都是我干的钢坦。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼啥酱,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼爹凹!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起镶殷,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤禾酱,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后绘趋,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體颤陶,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年陷遮,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了滓走。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡帽馋,死狀恐怖搅方,靈堂內(nèi)的尸體忽然破棺而出比吭,到底是詐尸還是另有隱情,我是刑警寧澤姨涡,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布衩藤,位于F島的核電站,受9級(jí)特大地震影響绣溜,放射性物質(zhì)發(fā)生泄漏慷彤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一怖喻、第九天 我趴在偏房一處隱蔽的房頂上張望底哗。 院中可真熱鬧,春花似錦锚沸、人聲如沸跋选。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)前标。三九已至,卻和暖如春距潘,著一層夾襖步出監(jiān)牢的瞬間炼列,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工音比, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留俭尖,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓洞翩,卻偏偏與公主長(zhǎng)得像稽犁,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子骚亿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,498評(píng)論 25 707
  • 1 背景 不能只分析源碼呀已亥,分析的同時(shí)也要整理歸納基礎(chǔ)知識(shí),剛好有人微博私信讓全面說說Android的動(dòng)畫来屠,所以今...
    未聞椛洺閱讀 2,691評(píng)論 0 10
  • 最近工作比較清閑虑椎,所以想系統(tǒng)的復(fù)習(xí)和學(xué)習(xí)下自己比較短缺的知識(shí),所以俱笛。捆姜。。 程序運(yùn)行效果圖: Android動(dòng)畫主要...
    小沈新手閱讀 502評(píng)論 0 1
  • 一 爺爺原本是山東人墨缘,那一年山東鬧饑荒星虹,人們?cè)诘乩飳ふ抑磺心芎诘臇|西零抬,先是吃地瓜秧,吃光了秧子就開始啃樹皮宽涌,最...
    智御閱讀 191評(píng)論 3 4
  • 從上周開始平夜,我們勵(lì)志團(tuán)做的不錯(cuò)的代理陸續(xù)在企業(yè)家群里做了分享。 無(wú)名總是客氣的感謝我卸亮,其實(shí)這個(gè)機(jī)會(huì)對(duì)我們來(lái)說真的很...
    勵(lì)志寶媽閱讀 429評(píng)論 0 0