動(dòng)畫(補(bǔ)間動(dòng)畫)的基礎(chǔ)知識(shí)

對(duì)于動(dòng)畫的知識(shí)總是用過(guò)就忘了贿肩,所以覺得有必要整理一下。方便以后忘記了可以查看衩辟。
補(bǔ)間動(dòng)畫常用的方法:
android:duration:動(dòng)畫單次播放時(shí)間盐欺。
android:fillAfter:動(dòng)畫是否保持播放結(jié)束位置赁豆。
android:fillBefore:動(dòng)畫是否保持播放開始位置。
android:interpolator:指定動(dòng)畫播放的速度曲線冗美,不設(shè)定默認(rèn)為勻速魔种。
android:repeatCount:動(dòng)畫持續(xù)次數(shù),如2粉洼,會(huì)播放三次节预。
android:repeatMode:動(dòng)畫播放模式。
android:startOffset:動(dòng)畫延遲播放的時(shí)長(zhǎng)属韧,單位是毫秒安拟。

下面分別介紹Animation的幾個(gè)子類:
AlphaAnimation:控制動(dòng)畫透明度的變化。RotateAnimation:控制動(dòng)畫旋轉(zhuǎn)的變化宵喂。
ScaleAnimation:控制動(dòng)畫成比例縮放的變化糠赦。TranslateAnimation:控制動(dòng)畫移動(dòng)的變化。
AnimationSet:以上幾種變化的組合。


一 拙泽、AlphaAnimation控制透明度動(dòng)畫
創(chuàng)建該動(dòng)畫的時(shí)候要指定動(dòng)畫開始的透明度淌山、結(jié)束時(shí)候的透明度和動(dòng)畫的持續(xù)時(shí)間。其中透明度可以使用0~1之間的float類型的數(shù)字指定顾瞻,0為透明泼疑,1為不透明。

1朋其、使用java代碼:

/**
  * 透明度變化
  */
protected void toAlpha() {
   // 動(dòng)畫從透明變?yōu)椴煌该?       AlphaAnimation anim = new AlphaAnimation(1.0f, 0.5f);
       // 動(dòng)畫單次播放時(shí)長(zhǎng)為2秒
       anim.setDuration(2000);
       // 動(dòng)畫播放次數(shù)
       anim.setRepeatCount(2);
       // 動(dòng)畫播放模式為REVERSE
       anim.setRepeatMode(Animation.REVERSE);
       // 設(shè)定動(dòng)畫播放結(jié)束后保持播放之后的效果
       anim.setFillAfter(true);
       // 開始播放王浴,iv_anim是一個(gè)ImageView控件
       iv_anim.startAnimation(anim);
 }

2脆炎、使用xml方式:
res\anim\anim_alpha.xml :

<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="2000"
    android:fillAfter="true"
    android:fromAlpha="1.0"
    android:repeatCount="2"
    android:repeatMode="reverse"
    android:toAlpha="0.5" >
</alpha>

tweenanimationdemo \ToXMLActivity.java:

  /**
   * 透明度變化
   */
  protected void toAlpha() {
    Animation anim=AnimationUtils.loadAnimation(ToXMLActivity.this, R.anim.anim_alpha);
    iv_anim.startAnimation(anim);
  }

二梅猿、RotateAnimation控制旋轉(zhuǎn)動(dòng)畫
RotateAnimation有多個(gè)構(gòu)造函數(shù),這里展示一個(gè)參數(shù)最多的秒裕,下面是它的完整簽名:RotateAnimation(float fromDegrees,float toDegrees,int pivotXType,float pivotXVlaue,int pivotYType,float pivotYValue)
RotateAnimation的構(gòu)造方法中袱蚓,fromDegrees和toDegrees分別指定動(dòng)畫開始和結(jié)束的旋轉(zhuǎn)角度,pivotXType和pivotYType指定旋轉(zhuǎn)中心的參照類型几蜻,它們以靜態(tài)常量的形式定義在Animation中喇潘,pivotXVlaue和pivotYVa指定旋轉(zhuǎn)中心的位置

1、java實(shí)現(xiàn):
tweenanimationdemo \ToCodeActivity.java:

  /**
   * 旋轉(zhuǎn)變化
   */
  protected void toRotate() {
    // 依照?qǐng)D片的中心梭稚,從0°旋轉(zhuǎn)到360°
    RotateAnimation anim = new RotateAnimation(0, 360,
        Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
        0.5f);
    anim.setDuration(2000);
    anim.setRepeatCount(2);
    anim.setRepeatMode(Animation.REVERSE);
    iv_anim.startAnimation(anim);
  }

2颖低、xml實(shí)現(xiàn):
res\anim\anim_alpha.xml:

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="2000"
    android:fromDegrees="0"
    android:pivotX="50%"
    android:pivotY="50%"
    android:repeatCount="2"
    android:toDegrees="360" >
</rotate>

tweenanimationdemo \ToXMLActivity.java

  /**
   * 旋轉(zhuǎn)變化
   */ 
  protected void toRotate() {
    Animation anim=AnimationUtils.loadAnimation(ToXMLActivity.this, R.anim.anim_rotate);
    iv_anim.startAnimation(anim);
  }

三、ScaleAnimation控制縮放動(dòng)畫
ScaleAnimation有多個(gè)構(gòu)造函數(shù)弧烤,這里介紹一個(gè)參數(shù)最多的ScaleAnimation(float fromX, float toX, float fromY, float toY, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)
ScaleAnimation的構(gòu)造函數(shù)中忱屑,fronX、toX暇昂、fromY莺戒、toY,分別指定了縮放開始和結(jié)束的坐標(biāo)急波,pivotXType和pivotYType設(shè)定了縮放的中心類型从铲,pivotXValue和pivotYValue設(shè)定了縮放中心的坐標(biāo)技掏。

1赶撰、java代碼實(shí)現(xiàn):
tweenanimationdemo \ToCodeActivity.java

/**
   * 比例縮放變化
   */
  protected void toScale() {
    // 以圖片的中心位置,從原圖的20%開始放大到原圖的2倍
    ScaleAnimation anim = new ScaleAnimation(0.2f, 2.0f, 0.2f, 2.0f,
        Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
        0.5f);
    anim.setDuration(2000);
    anim.setRepeatCount(2);
    anim.setRepeatMode(Animation.REVERSE);
    iv_anim.startAnimation(anim);
  }
 

2发框、xml實(shí)現(xiàn):
res\anim\anim_alpha.xml

<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="2000"
    android:pivotX="50%"
    android:pivotY="50%"
    android:fromXScale="0.2"
    android:fromYScale="0.2"
    android:toXScale="2.0"
    android:toYScale="2.0" >
</scale>

tweenanimationdemo \ToXMLActivity.java

/**
   * 比例縮放變化
   */
  protected void toScale() {
    Animation anim=AnimationUtils.loadAnimation(ToXMLActivity.this, R.anim.anim_scale);
    iv_anim.startAnimation(anim);
  }

四泣懊、TranslateAnimation控制位移動(dòng)畫

  • TranslateAnimation(int fromXType, float fromXValue, int toXType, float toXValue, int fromYType, float fromYValue, int toYType, float toYValue) *
    在TranslateAnimation構(gòu)造函數(shù)中吉嫩,它們指定了動(dòng)畫開始的點(diǎn)類型以及點(diǎn)位置和動(dòng)畫移動(dòng)的X、Y點(diǎn)的類型以及值嗅定。

1自娩、java代碼:
tweenanimationdemo \ToCodeActivity.java

/**
   * 位移變化
   */
  protected void toTranslate() {
    // 從父窗口的(0.1,0.1)的位置移動(dòng)父窗口X軸20%Y軸20%的距離
    TranslateAnimation anim = new TranslateAnimation(
        Animation.RELATIVE_TO_PARENT, 0.1f,
        Animation.RELATIVE_TO_PARENT, 0.2f,
        Animation.RELATIVE_TO_PARENT, 0.1f,
        Animation.RELATIVE_TO_PARENT, 0.2f);
    anim.setDuration(2000);
    anim.setRepeatCount(2);
    anim.setRepeatMode(Animation.REVERSE);
    iv_anim.startAnimation(anim);
  }

2、xml實(shí)現(xiàn):
res\anim\anim_translate.xml

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromXDelta="10%p" 
    android:toXDelta="20%p"
    android:fromYDelta="10%p"
    android:toYDelta="20%p"
    android:duration="2000"
    android:repeatCount="2" 
    android:repeatMode="reverse">
</translate>

tweenanimationdemo \ToXMLActivity.java

/**
   * 位移變化
   */
  protected void toTranslate() {
    Animation anim=AnimationUtils.loadAnimation(ToXMLActivity.this, R.anim.anim_translate);
    iv_anim.startAnimation(anim);
  }

五、AnimationSet控制組合動(dòng)畫
AnimationSet忙迁,組合動(dòng)畫脐彩,是Animation的子類。有些場(chǎng)景需要完成透明度變化姊扔、旋轉(zhuǎn)惠奸、縮放、移動(dòng)等多種變化恰梢。

AnimationSet有多個(gè)構(gòu)造函數(shù)佛南,這里介紹一個(gè)最常用的,下面是它的完整簽名:
AnimationSet(boolean shareInterpolator)
AnimationSet的構(gòu)造方法嵌言,只有一個(gè)boolean的參數(shù)嗅回,指定是否每個(gè)動(dòng)畫分享自己的Interpolator,如果為false摧茴,則AnimationSet中的每個(gè)動(dòng)畫绵载,使用自己的Interpolator,如果為true苛白,則AnimationSet中的每個(gè)動(dòng)畫的Interpolator被AnimationSet的Interpolator覆蓋娃豹。

1、java代碼實(shí)現(xiàn):

/**
   * 組合動(dòng)畫
   */
  protected void toSetAnim() {
    AnimationSet animSet = new AnimationSet(false);
    // 依照?qǐng)D片的中心购裙,從0°旋轉(zhuǎn)到360°
    RotateAnimation ra = new RotateAnimation(0, 360,
        Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
        0.5f);
    ra.setDuration(2000);
    ra.setRepeatCount(2);
    ra.setRepeatMode(Animation.REVERSE);

    // 以圖片的中心位置懂版,從原圖的20%開始放大到原圖的2倍
    ScaleAnimation sa = new ScaleAnimation(0.2f, 2.0f, 0.2f, 2.0f,
        Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
        0.5f);
    sa.setDuration(2000);
    sa.setRepeatCount(2);
    sa.setRepeatMode(Animation.REVERSE);

    // 動(dòng)畫從透明變?yōu)椴煌该?    AlphaAnimation aa = new AlphaAnimation(1.0f, 0.5f);
    // 動(dòng)畫單次播放時(shí)長(zhǎng)為2秒
    aa.setDuration(2000);
    // 動(dòng)畫播放次數(shù)
    aa.setRepeatCount(2);
    // 動(dòng)畫播放模式為REVERSE
    aa.setRepeatMode(Animation.REVERSE);
    // 設(shè)定動(dòng)畫播放結(jié)束后保持播放之后的效果
    aa.setFillAfter(true);

    animSet.addAnimation(sa);
    animSet.addAnimation(aa);
    animSet.addAnimation(ra);

    iv_anim.startAnimation(animSet);
  }
 

** 二、xml實(shí)現(xiàn):**

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

    <rotate
        android:duration="2000"
        android:fromDegrees="0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:repeatCount="2"
        android:toDegrees="360" >
    </rotate>

    <scale
        android:duration="2000"
        android:fromXScale="0.2"
        android:fromYScale="0.2"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="2.0"
        android:toYScale="2.0" >
    </scale>

    <alpha
        android:duration="2000"
        android:fillAfter="true"
        android:fromAlpha="1.0"
        android:repeatCount="2"
        android:repeatMode="reverse"
        android:toAlpha="0.5" >
    </alpha>
</set>
 
/**
   * 組合動(dòng)畫
   */
  protected void toSetAnim() {
    Animation anim=AnimationUtils.loadAnimation(ToXMLActivity.this, R.anim.anim_set);
    iv_anim.startAnimation(anim);
  }
 
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末躏率,一起剝皮案震驚了整個(gè)濱河市躯畴,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌禾锤,老刑警劉巖私股,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異恩掷,居然都是意外死亡倡鲸,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門黄娘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)峭状,“玉大人,你說(shuō)我怎么就攤上這事逼争∮糯玻” “怎么了?”我有些...
    開封第一講書人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵誓焦,是天一觀的道長(zhǎng)胆敞。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么移层? 我笑而不...
    開封第一講書人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任仍翰,我火速辦了婚禮,結(jié)果婚禮上观话,老公的妹妹穿的比我還像新娘予借。我一直安慰自己,他們只是感情好频蛔,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開白布灵迫。 她就那樣靜靜地躺著,像睡著了一般晦溪。 火紅的嫁衣襯著肌膚如雪瀑粥。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評(píng)論 1 289
  • 那天尼变,我揣著相機(jī)與錄音利凑,去河邊找鬼浆劲。 笑死嫌术,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的牌借。 我是一名探鬼主播度气,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼膨报!你這毒婦竟也來(lái)了磷籍?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤现柠,失蹤者是張志新(化名)和其女友劉穎院领,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體够吩,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡比然,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了周循。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片强法。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖湾笛,靈堂內(nèi)的尸體忽然破棺而出饮怯,到底是詐尸還是另有隱情,我是刑警寧澤嚎研,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布蓖墅,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏论矾。R本人自食惡果不足惜于樟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望拇囊。 院中可真熱鬧迂曲,春花似錦、人聲如沸寥袭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)传黄。三九已至杰扫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間膘掰,已是汗流浹背章姓。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留识埋,地道東北人凡伊。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像窒舟,于是被迫代替她去往敵國(guó)和親系忙。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348

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