Android之 Animation動畫的使用

2021-07-26 23:01:19 字數 4188 閱讀 6240

我們在使用一些控制項時候,難免會設定一些進入和退出的動畫效果,比如popupwindow、listview的item動畫、按鈕、等等,要使這些控制項有動畫效果,當然需要用到animation了。

下面我們就來講講animation有哪些動畫效果吧。

android的animation由四種型別組成:alpha、scale、translate、rotate,對應的效果如下:

xml配置檔案startanimation(animation);

alpha

漸變透明度動畫效果

scale

漸變尺寸伸縮動畫效果

translate

畫面轉換位置移動動畫效果

rotate

畫面轉移旋轉動畫效果

xml配置檔案是放在anim目錄下的:

新建動畫xml檔案,動畫效果都是通過這幾個屬性控制的:

我先來看看怎麼使用animation吧,最後我會逐個講講每個標籤的屬性及用法,使用animation有三個方法:

1、第乙個方法,就是先載入anim目錄下的xml檔案,通過animation animation =animationutils.loadanimation(this, r.anim.alpha)得到這個xml檔案的動畫效果(這個是通用的得到動畫效果的,還有每個動畫對應的單獨的類),然後通過各個控制項的button.setanimation(animation)或者button.startanimation(animation)方法可以設定動畫,startanimation()是顯示控制項立即執行動畫的,我們一般用它,設定的動畫是顯示控制項的時候有動畫效果的。

當然也可以在這個xml檔案中,不用set屬性設定多個集合的動畫效果,可以單獨的設定為某一種,得到一種動畫效果,即還是用上面那個通用的方法載入xml檔案的動畫,其它的也是如此。當然也可以不用xml檔案得到動畫,可以用相應的屬性類來操作,即,alphaanimation alpha = new alphaanimation(fromalpha, toalpha)來設定透明度的變化從而得到該動畫效果,其它的也是一樣的,都有對應的類,但是如果我們想用**操作不用xml檔案來得到多個復合動畫效果,那該怎麼做呢?答案是通過:animationset物件(我把它稱為動畫集合)來操作的:

animationset set = new animationset(true);//這個引數ture的意思是該動畫集合裡的所有動畫型別的差值器都用該動畫集合設定的(即set.setinterpolator(interpolator i)設定的),即不用自己的單獨設定(alpha.setinterpolator(i)或在xml檔案中設定)的插值器,設定為false就是用每個動畫型別自己設定的插值器,插值器其實就是乙個內建的有指定動畫效果的東西,後面我會講。  

alphaanimation alpha = new alphaanimation(1.0f, 0.0f);//透明度從不透明到完全透明

alpha.setduration(1000);//設定動畫持續的時間

set.addanimation(alpha);//新增乙個透明度變化的動畫效果,其它的效果也是這樣新增

這樣,我們就可以通過純**來設定多個復合的效果了。一般控制項有setanimation方法來設定的動畫是顯示後不要消失的。

2、第二個方法,這個方法多用於popupwindow的進入效果和退出效果,因為這個是通過style樣式來設定的,popupwindow中沒有setanimation方法,只能通過popwindow.setanimationstyle(r.style.showpopupanimation);來設定,所以它可以設定進入和退出效果,這個是顯示後需要消失的。廢話不多說,這個設定動畫直接是使用xml檔案,不需要**的,這裡以透明效果為例,當然做復合效果也行。上**吧:

2.1anim資料夾下的**:alpha_in.xml

<?xml version="1.0" encoding="utf-8"?>  

android:fromalpha="0.0"

android:toalpha="1.0"

/>

alpha_exit.xml

<?xml version="1.0" encoding="utf-8"?>  

上面的兩段**分別是進入和退出的動畫效果。

2.2【注意】最重要的是在values資料夾下的styles.xml中進行配置:

配置的**為:新增下面一段**即可:

2.3最後再呼叫這個style即可

public void pop()
3、還有乙個就是用來控制activity直接跳轉時用的overridependingtransition(r.anim.push_left_in,r.anim.push_left_out);這種很簡單,直接把xml檔案拿來用即可,注意,這個overridependingtransition(r.anim.push_left_in,r.anim.push_left_out);必須放在startactivity()之後。

好了,animation動畫效果就講到這裡了。

接下來講內建的

interpolator插值器

的動畫引數效果和怎麼結合animation來使用。插值器顧名思義就是把某乙個動畫效果插入到另乙個地方中使用。

首先,先給出插值器的各個引數的動畫效果吧

interpolator的系統值有下面幾個:

意義如下:

那麼,怎麼使用插值器呢?

1、在anim目錄下的xml檔案中,我們可以通過android:interpolator=""屬性來設定插值器的值,即:

<?xml version="1.0" encoding="utf-8"?>  

2、在**中設定,即通過

animation anim = animationutils.loadanimation(this, r.anim.alpha_exit);  

anim.setinterpolator(new accelerateinterpolator());

//或者

alphaanimation alpha = new alphaanimation(0.0f, 1.0f);

alpha.setinterpolator(new accelerateinterpolator());

設定之後,再用相應控制項啟動已經具有插值器值的animation,即button.startanimation(anim);這樣就啟動具有動畫的控制項了,該控制項就具有了所設定的插值器中的動畫了。

【注意】設定控制項動畫時候用**寫和用xml都可以,都可以有一樣的效果,但是在用xml設定插值器值的時候,必須把插值器的值設定在xml檔案的最外層的屬性中,不然不會生效的,即:

<?xml version="1.0" encoding="utf-8"?>  

<?xml version="1.0" encoding="utf-8"?>  

所以這點一定要注意!!!

最後總結一下,動畫效果和插值器效果,一般的控制項能用**寫

我推薦就是用**寫,少用xml寫,因為**寫起來好方便,建構函式中就可以把屬性的值設定完,除非只能通過setanimationstyle()來設定動畫的控制項就用xml+styles來寫。

作業中關於H5中動畫的實現 animation

h5 動畫名 animation name page1 scale 動畫時間 為2s animation duration 2s 動畫次數 數字代表的就是次數 infinite無限迴圈 animation iteration count infinite 動畫效果 animation timing ...

android之interpolator的用法詳解

acceleratedecelerateinterpolator 在動畫開始與結束的地方速率改變比較慢,在中間的時候加速 accelerateinterpolator 在動畫開始的地方速率改變比較慢,然後開始加速 anticipateinterpolator 開始的時候向後然後向前甩 anticip...

android之interpolator的用法詳解

android interpolator,經常和scorllercompat 配合使用,scrollercompat 是乙個控制滑動的類 interpolator 也可以通過 animation 的 setinterpolator 進行設定 interpolator 被用來修飾動畫效果,定義動畫的變...