【Android程序開發(fā)】動(dòng)畫-補(bǔ)間動(dòng)畫(TweenAnimation)

心得體會(huì)

  • 有時(shí)候從一而終很重要仪召,我這篇簡(jiǎn)書之前寫了一半靶草,然后因?yàn)闀r(shí)間原因担猛,就隔了好久幕垦,后面想把它補(bǔ)上發(fā)現(xiàn)自己沒有任何思緒,只能把之前的視頻又翻出來看了看~~

目錄

  • 1.補(bǔ)間動(dòng)畫簡(jiǎn)介

  • 2.XML實(shí)現(xiàn)補(bǔ)間動(dòng)畫

  • 3.代碼實(shí)現(xiàn)補(bǔ)間動(dòng)畫

  • 4.補(bǔ)間動(dòng)畫的缺點(diǎn)與不足

具體內(nèi)容

一傅联、補(bǔ)間動(dòng)畫簡(jiǎn)介

補(bǔ)間動(dòng)畫(TweenAnimation)也叫做View動(dòng)畫

  • 1.補(bǔ)間動(dòng)畫只關(guān)心開始和結(jié)束兩個(gè)狀態(tài) 中間的狀態(tài)由系統(tǒng)自動(dòng)補(bǔ)全
    1. 因?yàn)樗淖饔脤?duì)象是View先改,它支持平移、縮放蒸走、旋轉(zhuǎn)和透明度四種變換效果
名稱 標(biāo)簽 子類 效果
平移動(dòng)畫 <translate> TranslateAnimation 移動(dòng)
縮放動(dòng)畫 <scale> ScaleAnimation 放大或縮小
旋轉(zhuǎn)動(dòng)畫 <rotate> RotateAnimation 旋轉(zhuǎn)
透明度動(dòng)畫 <alpha> AlphaAnimation 改變透明度

二仇奶、XML實(shí)現(xiàn)補(bǔ)間動(dòng)畫

XML實(shí)現(xiàn)補(bǔ)間動(dòng)畫,即通過在XML文件中設(shè)置相關(guān)屬性來達(dá)到動(dòng)畫的效果(補(bǔ)間動(dòng)畫的XML文件必須放置在res/anmi/ 文件夾中)

1.在res下創(chuàng)建一個(gè)anim文件
  • 1.切換到project目錄


    image.png
  • 2.在src/main/res/目錄下new(新建)Directory
    image.png
  • 3.命名為anim,然后返回到Android目錄比驻,新建一個(gè)Animation resource file
    image.png
2.Animation resource file里面共有屬性
屬性 描述
fillAfter 動(dòng)畫結(jié)束后View是否停留在結(jié)束位置该溯,true表示停留在結(jié)束位置
duration 動(dòng)畫的持續(xù)時(shí)間,單位為ms
startOffset 動(dòng)畫執(zhí)行延遲的時(shí)間嫁艇,單位為ms
interpolator 用于控制動(dòng)畫在不同時(shí)段的執(zhí)行速度朗伶,默認(rèn)是加減速插值器
repeatMode 有兩個(gè)取值:restart和reverse,reverse表示動(dòng)畫正反輪流執(zhí)行步咪,restart表示一直從頭開始執(zhí)行
repeatCount 動(dòng)畫的重復(fù)次數(shù)论皆,默認(rèn)為0,即不重復(fù)
zAdjustment 在執(zhí)行動(dòng)畫過程中調(diào)整Z軸的位置猾漫,有三個(gè)取值可選:normal点晴、top和bottom,默認(rèn)為normal
3.Animation resource file里面各類標(biāo)簽

3.1.set標(biāo)簽

  • <set>標(biāo)簽表示的是動(dòng)畫集合悯周,它可以包含若干個(gè)動(dòng)畫粒督,并且其內(nèi)部也是可以嵌套其他動(dòng)畫集合的。它有兩個(gè)可指定的屬性值如下:
屬性 描述
interpolator 表示動(dòng)畫集合所采用的插值器禽翼,默認(rèn)為加減速插值器
shareInterpolator 表示集合中的動(dòng)畫是否和集合共享同一個(gè)插值器屠橄。如果集合不指定插值器族跛,那么子動(dòng)畫就需要單獨(dú)指定所需的插值器或使用默認(rèn)值

3.2.translate標(biāo)簽

  • <translate>標(biāo)簽用于控制平移動(dòng)畫,它可以使一個(gè)View在水平/豎直方向上完成平移的動(dòng)畫效果锐墙,它的一系列屬性含義如下表所示:
屬性 描述
fromXDelta 表示 x 的起始值
toXDelta 表示 x 的結(jié)束值
fromYDelta 表示 y的起始值
toYDelta 表示 y的結(jié)束值

3.3.scale標(biāo)簽

  • <scale>標(biāo)簽表示縮放動(dòng)畫礁哄,它可以使View具有放大/縮小的效果,它的一系列屬性含義如下表所示:
屬性 描述
fromXScale 水平方向縮放的起始值
toXScale 水平方向縮放的結(jié)束值
fromYScale 豎直方向縮放的起始值
toYScale 豎直方向縮放的結(jié)束值
pivotX 縮放的軸點(diǎn)的 x 坐標(biāo)
pivotY 縮放的軸點(diǎn)的 y 坐標(biāo)

3.4.rotate標(biāo)簽

  • <rotate>標(biāo)簽表示旋轉(zhuǎn)動(dòng)畫溪北,它可以使View具有旋轉(zhuǎn)的效果桐绒,它的一系列屬性含義如下表所示:
屬性 描述
fromDegrees 旋轉(zhuǎn)開始的角度
toDegrees 旋轉(zhuǎn)結(jié)束的角度
fromYScale 豎直方向縮放的起始值
pivotX 旋轉(zhuǎn)的軸點(diǎn)的 x 坐標(biāo)
pivotY 旋轉(zhuǎn)的軸點(diǎn)的 y 坐標(biāo)

3.5.alpha標(biāo)簽

  • <alpha>標(biāo)簽表示透明度動(dòng)畫,它可以改變View的透明度之拨,它的一系列屬性含義如下表所示:
屬性 描述
fromAlpha 表示透明度的起始值
toAlpha 表示透明度的結(jié)束值

實(shí)例分析:

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="1000"
    android:fillAfter="true"
    android:repeatMode="reverse">
    <!--translate標(biāo)簽:表示View的x坐標(biāo)從0平移到300-->
    <translate android:fromXDelta="0"
        android:toXDelta="300" />
    <!--alpha標(biāo)簽:表示將View的透明度從完全透明變?yōu)橥耆煌该?->
    <alpha android:fromAlpha="0"
        android:toAlpha="1.0"/>
    <!--scale標(biāo)簽:表示將View從原來的0倍放大到原來的1.0倍,以View中心為軸點(diǎn)進(jìn)行縮放(默認(rèn)情況下軸點(diǎn)會(huì)為View的左上角)-->
    <scale android:fromXScale="0"
        android:toXScale="1.0"
        android:fromYScale="0"
        android:toYScale="1.0"
        android:pivotX="50%"
        android:pivotY="50%"
        />
   <!--rotate標(biāo)簽:表示View從0°到360°茉继,以View中心為軸點(diǎn)進(jìn)行旋轉(zhuǎn)(默認(rèn)情況下軸點(diǎn)會(huì)為View的左上角)-->
    <rotate android:fromDegrees="0"
    android:toDegrees="360"
    android:pivotX="50%"
    android:pivotY="50%"/>
</set>

三、代碼實(shí)現(xiàn)補(bǔ)間動(dòng)畫

  • 在Java中蚀乔,translate烁竭、scale、rotate乙墙、alpha颖变、set分別對(duì)應(yīng)下面的幾個(gè)類:
    1. TranslateAnimation
    TranslateAnimation 有三個(gè)構(gòu)造方法來創(chuàng)建對(duì)象,這三個(gè)構(gòu)造方法的說明如下所示:
public TranslateAnimation(Context context, AttributeSet attrs)
參數(shù) 含義
context 上下文對(duì)象
attrs xml中讀取的屬性設(shè)置
public TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta)
參數(shù) 含義
fromXDelta 動(dòng)畫開始時(shí)x的取值听想,單位為px
toXDelta 動(dòng)畫結(jié)束時(shí)x的取值腥刹,單位為px
fromYDelta 動(dòng)畫開始時(shí)y的取值,單位為px
toYDelta 動(dòng)畫結(jié)束時(shí)y的取值汉买,單位為px
public TranslateAnimation(int fromXType, float fromXValue, int toXType, float toXValue,
        int fromYType, float fromYValue, int toYType, float toYValue)
參數(shù) 含義
fromXType 動(dòng)畫開始時(shí)x的取值類型
fromXValue 動(dòng)畫開始時(shí)x的取值衔峰,其取值受fromXType影響
toXType 動(dòng)畫結(jié)束時(shí)x的取值,其取值受toXType影響
toXValue 動(dòng)畫結(jié)束時(shí)x的取值蛙粘,其取值受toXType影響
fromYType 動(dòng)畫開始時(shí)y的取值類型
fromYValue 動(dòng)畫開始時(shí)y的取值垫卤,其取值受fromYType影響
toYType 動(dòng)畫結(jié)束時(shí)y的取值,其取值受toYType影響
toYValue t動(dòng)畫結(jié)束時(shí)y的取值出牧,其取值受toYType影響
  • 在這個(gè)構(gòu)造方法中穴肘,Type 的取值有如下三個(gè),它們的描述如下表所示:
Type 描述
Animation.ABSOLUTE 取絕對(duì)值舔痕,所取值表示像素值的大小评抚,單位為px
Animation.RELATIVE_TO_SELF 相對(duì)自身的百分比取值,所取值表示相對(duì)自身長(zhǎng)/寬的百分比
Animation.RELATIVE_TO_PARENT 相對(duì)父布局的百分比取值伯复,所取值表示相對(duì)父布局長(zhǎng)/寬的百分比

2. ScaleAnimation
ScaleAnimation有4個(gè)構(gòu)造方法來創(chuàng)建對(duì)象慨代,它們的說明如下所示:

public ScaleAnimation(Context context, AttributeSet attrs)
參數(shù) 含義
context 上下文對(duì)象
attrs xml中讀取的屬性設(shè)置
public ScaleAnimation(float fromX, float toX, float fromY, float toY)
參數(shù) 含義
fromX x開始時(shí)的縮放比例
toX x結(jié)束時(shí)的縮放比例
fromY y開始時(shí)的縮放比例
toY y結(jié)束時(shí)的縮放比例
public ScaleAnimation(float fromX, float toX, float fromY, float toY,
        float pivotX, float pivotY)
參數(shù) 含義
fromX x開始時(shí)的縮放比例
toX x結(jié)束時(shí)的縮放比例
fromY y開始時(shí)的縮放比例
toY y結(jié)束時(shí)的縮放比例
pivotX 縮放軸點(diǎn)的x坐標(biāo),單位為px
pivotY 縮放軸點(diǎn)的y坐標(biāo)啸如,單位為px
public ScaleAnimation(float fromX, float toX, float fromY, float toY,
        int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)
參數(shù) 含義
fromX x開始時(shí)的縮放比例
toX x結(jié)束時(shí)的縮放比例
fromY y開始時(shí)的縮放比例
toY y結(jié)束時(shí)的縮放比例
pivotXType 縮放軸點(diǎn)x的取值類型
pivotXValue 縮放軸點(diǎn)的x的取值侍匙,其取值受pivotXType影響
pivotYType 縮放軸點(diǎn)y的取值類型
pivotYValue 縮放軸點(diǎn)的y的取值,其取值受pivotYType影響

3. RotateAnimation
RotateAnimation 同樣有4個(gè)方法來創(chuàng)建對(duì)象叮雳,說明如下所示:

public RotateAnimation(Context context, AttributeSet attrs)
參數(shù) 含義
context 上下文對(duì)象
attrs xml中讀取的屬性設(shè)置
public RotateAnimation(float fromDegrees, float toDegrees)
參數(shù) 含義
fromDegrees 開始旋轉(zhuǎn)時(shí)的角度值
toDegrees 旋轉(zhuǎn)結(jié)束時(shí)的角度值
public RotateAnimation(float fromDegrees, float toDegrees, float pivotX, float pivotY)
參數(shù) 含義
fromDegrees 開始旋轉(zhuǎn)時(shí)的角度值
toDegrees 旋轉(zhuǎn)結(jié)束時(shí)的角度值
pivotX 軸點(diǎn)的x坐標(biāo)想暗,單位為px
pivotY 軸點(diǎn)的y坐標(biāo)妇汗,單位為px
public RotateAnimation(float fromDegrees, float toDegrees, int pivotXType, float pivotXValue,
        int pivotYType, float pivotYValue)
參數(shù) 含義
fromDegrees 開始旋轉(zhuǎn)時(shí)的角度值
toDegrees 旋轉(zhuǎn)結(jié)束時(shí)的角度值
pivotXType 軸點(diǎn)x的取值類型
pivotXValue 軸點(diǎn)的x的取值,其取值受pivotXType影響
pivotYType 軸點(diǎn)y的取值類型
pivotYValue 軸點(diǎn)的y的取值说莫,其取值受pivotYType影響

4. AlphaAnimation
AlphaAnimation 應(yīng)當(dāng)是這所有動(dòng)畫類型里面最為簡(jiǎn)單的了铛纬,它只有以下兩個(gè)構(gòu)造方法:

public AlphaAnimation(Context context, AttributeSet attrs)
參數(shù) 含義
context 上下文對(duì)象
attrs xml中讀取的屬性設(shè)置
public AlphaAnimation(float fromAlpha, float toAlpha)
參數(shù) 含義
fromAlpha 動(dòng)畫開始時(shí)的透明度,0表示完全透明唬滑,1表示完全不透明
toAlpha 動(dòng)畫結(jié)束時(shí)的透明度,0表示完全透明棺弊,1表示完全不透明

代碼創(chuàng)建補(bǔ)間動(dòng)畫小例子

  • XML里面
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
<View
    android:id="@+id/iv_anim"
    android:layout_width="200dp"
    android:layout_height="200dp"
    android:background="@color/colorAccent"/>
</RelativeLayout>
  • MainActivity里面
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if(event.getAction()==MotionEvent.ACTION_DOWN){
            //1.找到需要?jiǎng)赢嫷目丶?            View v =findViewById(R.id.iv_anim);
            //2.創(chuàng)建動(dòng)畫
         //AlphaAnimation alpha=new AlphaAnimation(0,1);
         //alpha.setDuration(1000);
         //alpha.setFillAfter(true);
            RotateAnimation  rotate=new RotateAnimation(0,360,(float)(0.5*v.getWidth()),(float)(0.5*v.getHeight()));
            rotate.setDuration(1000);
         //  v.startAnimation(alpha);
            //3.開啟動(dòng)畫
            v.startAnimation(rotate);
        }
        return true;
    }
}
  • 運(yùn)行結(jié)果
    20191029_204630.gif

四晶密、補(bǔ)間動(dòng)畫的缺點(diǎn)與不足

  • 1.沒有改變View的屬性:補(bǔ)間動(dòng)畫只是改變視覺效果,例如將一個(gè)按鈕移動(dòng)到某個(gè)位置之后模她,點(diǎn)擊移動(dòng)后的按鈕并無響應(yīng)點(diǎn)擊事件稻艰,而點(diǎn)擊按鈕移動(dòng)前的位置則響應(yīng)了點(diǎn)擊事件,說明View只是改變了視覺效果侈净,并沒有改變實(shí)際位置
  • 2.作用對(duì)象的局限性: 補(bǔ)間動(dòng)畫的作用對(duì)象只能是View尊勿,無法對(duì)非View的對(duì)象進(jìn)行動(dòng)畫操作
  • 3.動(dòng)畫效果單一:補(bǔ)間動(dòng)畫只能出現(xiàn)平移、縮放畜侦、旋轉(zhuǎn)元扔、透明度等簡(jiǎn)單的功能,一旦遇到相對(duì)復(fù)雜的動(dòng)畫效果,即超出了上述4種動(dòng)畫效果旋膳,那么補(bǔ)間動(dòng)畫則無法實(shí)現(xiàn)澎语。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市验懊,隨后出現(xiàn)的幾起案子擅羞,更是在濱河造成了極大的恐慌,老刑警劉巖义图,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件减俏,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡碱工,警方通過查閱死者的電腦和手機(jī)娃承,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來痛垛,“玉大人草慧,你說我怎么就攤上這事〕淄罚” “怎么了漫谷?”我有些...
    開封第一講書人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)蹂析。 經(jīng)常有香客問我舔示,道長(zhǎng)碟婆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任惕稻,我火速辦了婚禮竖共,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘俺祠。我一直安慰自己公给,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開白布蜘渣。 她就那樣靜靜地躺著淌铐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蔫缸。 梳的紋絲不亂的頭發(fā)上腿准,一...
    開封第一講書人閱讀 51,541評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音拾碌,去河邊找鬼吐葱。 笑死,一個(gè)胖子當(dāng)著我的面吹牛校翔,可吹牛的內(nèi)容都是我干的弟跑。 我是一名探鬼主播,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼展融,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼窖认!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起告希,我...
    開封第一講書人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤扑浸,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后燕偶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體喝噪,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年指么,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了酝惧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡伯诬,死狀恐怖晚唇,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情盗似,我是刑警寧澤哩陕,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響悍及,放射性物質(zhì)發(fā)生泄漏闽瓢。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一心赶、第九天 我趴在偏房一處隱蔽的房頂上張望扣讼。 院中可真熱鬧,春花似錦缨叫、人聲如沸椭符。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)艰山。三九已至,卻和暖如春咏闪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背摔吏。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工鸽嫂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人征讲。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓据某,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親诗箍。 傳聞我的和親對(duì)象是個(gè)殘疾皇子癣籽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

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

  • 【Android 動(dòng)畫】 動(dòng)畫分類補(bǔ)間動(dòng)畫(Tween動(dòng)畫)幀動(dòng)畫(Frame 動(dòng)畫)屬性動(dòng)畫(Property ...
    Rtia閱讀 6,157評(píng)論 1 38
  • 概述 在Android開發(fā)的過程中,View的變化是很常見的滤祖,如果View變化的過程沒有動(dòng)畫來過渡而是瞬間完成筷狼,會(huì)...
    小蕓論閱讀 38,981評(píng)論 18 134
  • 1 背景 不能只分析源碼呀,分析的同時(shí)也要整理歸納基礎(chǔ)知識(shí)匠童,剛好有人微博私信讓全面說說Android的動(dòng)畫埂材,所以今...
    未聞椛洺閱讀 2,709評(píng)論 0 10
  • 轉(zhuǎn)載一篇高質(zhì)量博文,原地址請(qǐng)戳這里轉(zhuǎn)載下來方便今后查看汤求。1 背景不能只分析源碼呀俏险,分析的同時(shí)也要整理歸納基礎(chǔ)知識(shí),...
    Elder閱讀 1,942評(píng)論 0 24
  • 動(dòng)畫基礎(chǔ)概念 動(dòng)畫分類 Android 中動(dòng)畫分為兩種扬绪,一種是 Tween 動(dòng)畫竖独、還有一種是 Frame 動(dòng)畫。 ...
    Rtia閱讀 1,229評(píng)論 0 6