Android Animation - Tween Animations(補間動畫)

補間動畫:在視圖容器內進行一系列圖像變化而產生的動畫效果愉择。

分類

XML JAVA 名稱
<alpha> AlphaAnimation 透明度動畫
<rotate> RotateAnimation 旋轉動畫
<scale> ScaleAnimation 縮放動畫
<translate> TranslateAnimation 位移動畫
<set> AnimationSet 持有動畫元素alpha、scale凛辣、translate谐腰、rotate僻澎、set的容器

XML定義動畫,文件存放在 res/anim/ 目錄下州泊。

AlphaAnimation 透明度動畫

JAVA
/**
 *  fromAlpha  開始透明度
 *  toAlpha    結束透明度
 *
 *  0.0 全透明 ~ 1.0 不透明
 */
AlphaAnimation(float fromAlpha, float toAlpha)

//例
Animation alphaAnimation = new AlphaAnimation(0.1f, 1.0f);  
XML
//alpha.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" > 
    <alpha 
        android:duration="1000" 
        android:fromAlpha="0.0" 
        android:toAlpha="1.0" /> 
</set>

// 用AnimationUtils裝載動畫配置文件
Animation animation = AnimationUtils.loadAnimation(this, R.anim.alpha);

RotateAnimation 旋轉動畫

JAVA
//(1)
/**
 *  fromDegrees  起始角度 
 *  toDegrees    結束角度 ('+'順時針丧蘸、'-'逆時針)
 *  pivotXType   動畫在X軸相對于物件位置類型 
 *  pivotXValue  動畫相對于物件的X坐標的開始位置
 *  pivotYType   動畫在Y軸相對于物件位置類型 
 *  pivotYValue  動畫相對于物件的Y坐標的開始位置
 */
RotateAnimation(float fromDegrees, float toDegrees, 
        int pivotXType, float pivotXValue, int pivotYType, float pivotYValue) ;

//例
Animation rotateAnimation = new RotateAnimation(0.0f, +350.0f, 
     Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);

//(2)
/**
 *  fromDegrees  起始角度 
 *  toDegrees    結束角度 ('+'順時針、'-'逆時針)
 *  pivotX   動畫在X軸相對于物件位置
 *  pivotY   動畫在Y軸相對于物件位置 
 */
RotateAnimation(float fromDegrees, float toDegrees, float pivotX, float pivotY) ;

pivotX:動畫相對于物件的X坐標的開始位置(數值遥皂、百分數力喷、百分數p)

  1. 50:以當前View左上角坐標加50px為初始點刽漂;
  2. 50%:以當前View的左上角加上當前View寬高的50%做為初始點;
  3. 50%p:表示以當前View的左上角加上父控件寬高的50%做為初始點)弟孟。

pivotY雷同贝咙。

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

// 用AnimationUtils裝載動畫配置文件
Animation animation = AnimationUtils.loadAnimation(this, R.anim.rotate);

ScaleAnimation 縮放動畫

JAVA
//(1)
/**
 *  fromX 起始X坐標伸縮尺寸
 *  toX   結束X坐標伸縮尺寸
 *  fromY 起始Y坐標伸縮尺寸
 *  toY   結束Y坐標伸縮尺寸
 *
 *  以上四種屬性值 
 *  0.0:收縮到沒有 | 1.0:正常無伸縮 | 值小于1.0:收縮 | 值大于1.0:放大
 *
 *  pivotXType  在X軸相對于物件位置類型
 *  pivotXValue 相對于物件的X坐標的開始位置
 *  pivotXType  在Y軸相對于物件位置類型
 *  pivotYValue 相對于物件的Y坐標的開始位置
 */
ScaleAnimation(float fromX, float toX, float fromY, float toY, 
        int pivotXType, float pivotXValue, int pivotYType, float pivotYValue);

//例
Animation animation = new ScaleAnimation(0.0f, 1.4f, 0.0f, 1.4f, 
        Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
// 0.5f:相對于物件自身 X/Y 坐標上的中點位置

//(2)
/**
 *  pivotX  相對于物件的X坐標的開始位置
 *  pivotY  相對于物件的Y坐標的開始位置
 *  值可為數值、百分數拂募、百分數p
 */
ScaleAnimation(float fromX, float toX, float fromY, float toY, float pivotX, float pivotY);
// 50%:物件的 X/Y 方向坐標上的中點位置
XML
//sacle.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" > 
    <scale
       android:fromXScale="1.0"
       android:toXScale="0.0"
       android:fromYScale="1.0"
       android:toYScale="0.0"
       android:pivotX="50%"
       android:pivotY="50%"
       android:duration="1000"/>
</set>

// 用AnimationUtils裝載動畫配置文件
Animation animation = AnimationUtils.loadAnimation(this, R.anim.scale);

TranslateAnimation 位移動畫

JAVA
//(1)
/**
 *  fromXType  起始X坐標移動位置類型
 *  fromXValue 起始X坐標移動位置
 *  toXType    結束X坐標移動位置類型
 *  toXValue   結束X坐標移動位置
 */
TranslateAnimation(int fromXType, float fromXValue, int toXType, float toXValue, 
                   int fromYType, float fromYValue, int toYType, float toYValue)

//例
TranslateAnimation translateAnimation = new TranslateAnimation(
                  Animation.RELATIVE_TO_SELF, 0f,
                  Animation.RELATIVE_TO_SELF, 0.5f,
                  Animation.RELATIVE_TO_SELF, 0f,
                  Animation.*RELATIVE_TO_SELF, 0.5f);

//(2)
/**
 *  fromXDelta  起始時X坐標移動位置
 *  toXDelta    結束時X坐標移動位置
 *  fromYDelta  起始時Y坐標移動位置
 *  toYDelta    結束時Y坐標移動位置
 */
TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta)

//例
Animation translateAnimation = new TranslateAnimation(0.1f, 100.0f, 0.1f, 100.0f); 
XML
//translate.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" > 
    <alpha 
        android:duration="1000" 
        android:fromAlpha="0.0" 
        android:toAlpha="1.0" /> 
</set>

// 用AnimationUtils裝載動畫配置文件
Animation animation = AnimationUtils.loadAnimation(this, R.anim.translate);

AnimationSet

AnimationSet繼承自Animation庭猩,是上面四種動畫的組合容器管理類。對set標簽使用Animation屬性時會對該標簽下的所有子控件產生影響陈症。

JAVA
AnimationSet animationSet = new AnimationSet(true);

AlphaAnimation alphaAnimation = new AlphaAnimation(1, 0);
RotateAnimation rotateAnimation = new RotateAnimation(0, 360,
                  Animation.RELATIVE_TO_SELF, 0.5f,
                  Animation.RELATIVE_TO_SELF, 0.5f);
rotateAnimation.setDuration(1000);

animationSet.addAnimation(rotateAnimation);
animationSet.addAnimation(alphaAnimation);
           
image.startAnimation(animationSet);
XML
//animset.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" > 
    <alpha
        android:fromAlpha="1.0"
        android:toAlpha="0.0"
        android:startOffset="500"
        android:duration="500"/>
    <translate
        android:fromXDelta="0%"
        android:toXDelta="100%"
        android:fromYDelta="0%"
        android:toYDelta="100%"
        android:duration="2000"/>
</set>

// 用AnimationUtils裝載動畫配置文件
Animation animation = AnimationUtils.loadAnimation(this, R.anim.animset);

屬性

XML JAVA 描述
android:detachWallpaper setDetachWallpaper(boolean) 是否在壁紙上運行
android:duration setDuration(long) 動畫持續(xù)時間蔼水,毫秒為單位
android:fillAfter setFillAfter(boolean) 是否保持動畫結束時的狀態(tài)
aandroid:fillBefore setFillBefore(boolean) 動畫結束時是否還原起始的狀態(tài)
android:fillEnabled setFillEnabled(boolean) android:fillBefore效果相同
android:interpolator setInterpolator(Interpolator) 插值器
android:repeatCount setRepeatCount(int) 重復次數,-1為循環(huán)
aandroid:repeatMode setRepeatMode(int) 重復類型录肯,reverse:倒序回放趴腋;restart:從頭播放
android:startOffset setStartOffset(long) 動畫開始時的等待時間,單位為毫秒
android:zAdjustment setZAdjustment(int) 被設置動畫的內容運行時在Z軸上的位置top/bottom/normal嘁信,默認為normal
android:detachWallpaper setDetachWallpaper(boolean) 是否在壁紙上運行

方法

JAVA 描述
reset() 重啟動畫
cancel() 取消動畫
start() 開始動畫
setAnimationListener(AnimationListener listener) 動畫監(jiān)聽
hasStarted() 動畫是否開始
hasEnded() 動畫是否結束

其他

View類動畫操作方法:

JAVA 描述
startAnimation(Animation animation) 設置并開始動畫
clearAnimation() 清除動畫
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末于样,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子潘靖,更是在濱河造成了極大的恐慌穿剖,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件卦溢,死亡現場離奇詭異糊余,居然都是意外死亡,警方通過查閱死者的電腦和手機单寂,發(fā)現死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門贬芥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人宣决,你說我怎么就攤上這事蘸劈。” “怎么了尊沸?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵威沫,是天一觀的道長。 經常有香客問我洼专,道長棒掠,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任屁商,我火速辦了婚禮烟很,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己雾袱,他們只是感情好恤筛,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著谜酒,像睡著了一般叹俏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上僻族,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天粘驰,我揣著相機與錄音,去河邊找鬼述么。 笑死蝌数,一個胖子當著我的面吹牛,可吹牛的內容都是我干的度秘。 我是一名探鬼主播顶伞,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼剑梳!你這毒婦竟也來了唆貌?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤垢乙,失蹤者是張志新(化名)和其女友劉穎锨咙,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體追逮,經...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡酪刀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了钮孵。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片骂倘。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖巴席,靈堂內的尸體忽然破棺而出历涝,到底是詐尸還是另有隱情,我是刑警寧澤漾唉,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布睬关,位于F島的核電站,受9級特大地震影響毡证,放射性物質發(fā)生泄漏。R本人自食惡果不足惜蔫仙,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一料睛、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦恤煞、人聲如沸屎勘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽概漱。三九已至,卻和暖如春喜喂,著一層夾襖步出監(jiān)牢的瞬間瓤摧,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工玉吁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留照弥,地道東北人。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓进副,卻偏偏與公主長得像这揣,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子影斑,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內容

  • 1 背景 不能只分析源碼呀给赞,分析的同時也要整理歸納基礎知識,剛好有人微博私信讓全面說說Android的動畫矫户,所以今...
    未聞椛洺閱讀 2,693評論 0 10
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,519評論 25 707
  • 關于android的動畫網上介紹已經很多了片迅,寫的好的文章也有很多,自己記錄一下關于補間動畫的屬性: 1.補間動畫種...
    一劍飆血_18e7閱讀 1,382評論 0 0
  • 1.3UIApplication常用操作 1設置應用程序圖標上面紅色的數字 2隱藏系統(tǒng)狀態(tài)欄 3設置網絡指示器(狀...
    劉2傻閱讀 218評論 1 1
  • 運算符和表達式 算術運算符 + - * / % ++ --+運算:有加法吏垮,也有連接運算符js任何類型的數據和字符串...
    幽谷聽泉閱讀 153評論 0 0