導航:首頁 > 操作系統 > android正弦動畫

android正弦動畫

發布時間:2022-06-15 21:48:38

android中的動畫有哪幾類,它們的特點和區別是什麼

Android中的常用動畫有三種:

1、View Animation(Tween Animation 補間動畫)


動畫的對象除了傳統的View對象,還可以是Object對象,動畫之後,Object對象的屬性值被實實在在的改變了。Propertyanimation能夠通過改變View對象的實際屬性來實現View動畫。任何時候View屬性的改變,View能自動調用invalidate()來試試刷新。

❷ Android 中的動畫有哪幾類,它們的特點和區別是什麼

Android包含三種動畫:

ViewAnimation、 Drawable Animation、Property Animation。

ViewAnimation(Tween Animation補間動畫):


動畫的對象除了傳統的View對象,還可以是Object對象,動畫之後,Object對象的屬性值被實實在在的改變了。Property animation能夠通過改變View對象的實際屬性來實現View動畫。任何時候View屬性的改變,View能自動調用invalidate()來刷新。

❸ Android中的幾種動畫

幀動畫:指通過指定每一幀的圖片和播放時間,有序的進行播放而形成動畫效果,比如想聽的律動條。

補間動畫:指通過指定View的初始狀態、變化時間、方式,通過一系列的演算法去進行圖形變換,從而形成動畫效果,主要有Alpha、Scale、Translate、Rotate四種效果。注意:只是在視圖層實現了動畫效果,並沒有真正改變View的屬性,比如滑動列表,改變標題欄的透明度。

屬性動畫:在Android3.0的時候才支持,通過不斷的改變View的屬性,不斷的重繪而形成動畫效果。相比於視圖動畫,View的屬性是真正改變了。比如view的旋轉,放大,縮小。

❹ 關於Android動畫,停頓抖動一下,停頓幾秒,再抖動

a、在XML資源中定義Animation,使用AnimationUtils中的loadAnimation()函數載入動畫;
b、使用Animation子類的構造函數來初始化Animation對象。

然後,利用 Animation.AnimationListener 來監聽, 在Animation 結束的時候, 再重新來執行這個Animation.

❺ android上怎樣加快過場動畫的速度

android:interpolator="@android:anim/accelerate_interpolator" 設置動畫為加速動畫(動畫播放中越來越快)

android:interpolator="@android:anim/decelerate_interpolator" 設置動畫為減速動畫(動畫播放中越來越慢)

android:interpolator="@android:anim/accelerate_decelerate_interpolator" 設置動畫為先加速在減速(開始速度最快 逐漸減慢)

android:interpolator="@android:anim/anticipate_interpolator" 先反向執行一段,然後再加速反向回來(相當於我們彈簧,先反向壓縮一小段,然後在加速彈出)

android:interpolator="@android:anim/anticipate_overshoot_interpolator" 同上先反向一段,然後加速反向回來,執行完畢自帶回彈效果(更形象的彈簧效果)

android:interpolator="@android:anim/bounce_interpolator" 執行完畢之後會回彈跳躍幾段(相當於我們高空掉下一顆皮球,到地面是會跳動幾下)

android:interpolator="@android:anim/cycle_interpolator" 循環,動畫循環一定次數,值的改變為一正弦函數:Math.sin(2* mCycles* Math.PI* input)

android:interpolator="@android:anim/linear_interpolator" 線性均勻改變

❻ 安卓 編程如何為一個圖片加上透明度和平移兩個動畫

Drawable 最強大的功能是:顯示Animation。Android SDK介紹了2種Animation:

•Tween Animation(漸變動畫):通過對場景里的對象不斷做圖像變換(平移、縮放、旋轉)產生動畫效果
•Frame Animation(幀動畫) :順序播放事先做好的圖像,類似放電影
在使用Animation前,我們先學習如何定義Animation,這對我們使用Animation會有很大的幫助。Animation是以XML格式定義的,定義好的XML文件存放在res/anim中。由於Tween Animation與Frame Animation的定義、使用都有很大的差異,我們將分開介紹,本篇幅中介紹Tween Animation的定義與使用,後續篇幅再詳細介紹Frame Animation。按照XML文檔的結構【父節點,子節點,屬性】來介紹Tween Animation,其由4種類型:

•Alpha:漸變透明度動畫效果
•Scale:漸變尺寸伸縮動畫效果
•Translate:畫面轉換位置移動動畫效果
•Rotate:畫面轉換位置移動動畫效果
在介紹以上4種類型前,先介紹Tween Animation共同的節點屬性。

表一

屬性[類型] 功能
Duration[long] 屬性為動畫持續時間 時間以毫秒為單位
fillAfter [boolean] 當設置為true ,該動畫轉化在動畫結束後被應用
fillBefore[boolean] 當設置為true ,該動畫轉化在動畫開始前被應用
interpolator
指定一個動畫的插入器 有一些常見的插入器
accelerate_decelerate_interpolator
加速-減速 動畫插入器
accelerate_interpolator
加速-動畫插入器
decelerate_interpolator
減速- 動畫插入器
其他的屬於特定的動畫效果
repeatCount[int] 動畫的重復次數
repeatMode[String] 定義重復的行為 1:"restart" 2:"reverse" eg: android:repeatMode="reverse"

startOffset[long] 動畫之間的時間間隔,從上次動畫停多少時間開始執行下個動畫
zAdjustment[int] 定義動畫的Z Order的改變 0:保持Z Order不變
1:保持在最上層
-1:保持在最下層

看了以上節點,大家是不是都想開始定義動畫了。下面我們就開始結合具體的例子,介紹4種類型各自特有的節點元素。

表二

XML節點 功能說明
alpha 漸變透明度動畫效果
<alpha
android:fromAlpha=」0.1″
android:toAlpha=」1.0″
android:ration=」3000″ />
fromAlpha 屬性為動畫起始時透明度
0.0表示完全透明
1.0表示完全不透明
以上值取0.0-1.0之間的float數據類型的數字
toAlpha 屬性為動畫結束時透明度
表三

scale 漸變尺寸伸縮動畫效果
<scale
android:interpolator= 「@android:anim/accelerate_decelerate_interpolator」
android:fromXScale=」0.0″
android:toXScale=」1.4″
android:fromYScale=」0.0″
android:toYScale=」1.4″
android:pivotX=」50%」
android:pivotY=」50%」
android:fillAfter=」false」
android:startOffset=「700」
android:ration=」700″
android:repeatCount=」10″ />
fromXScale[float] fromYScale[float] 為動畫起始時,X、Y坐標上的伸縮尺寸 0.0表示收縮到沒有
1.0表示正常無伸縮
值小於1.0表示收縮
值大於1.0表示放大
toXScale [float]
toYScale[float] 為動畫結束時,X、Y坐標上的伸縮尺寸
pivotX[float]
pivotY[float] 為動畫相對於物件的X、Y坐標的開始位置 屬性值說明:從0%-100%中取值,50%為物件的X或Y方向坐標上的中點位置

表四

translate 畫面轉換位置移動動畫效果
<translate
android:fromXDelta=」30″
android:toXDelta=」-80″
android:fromYDelta=」30″
android:toYDelta=」300″
android:ration=」2000″ />
fromXDelta
toXDelta 為動畫、結束起始時 X坐標上的位置
fromYDelta
toYDelta 為動畫、結束起始時 Y坐標上的位置

表五

rotate 畫面轉移旋轉動畫效果
<rotate
android:interpolator=」@android:anim/accelerate_decelerate_interpolator」
android:fromDegrees=」0″
android:toDegrees=」+350″
android:pivotX=」50%」
android:pivotY=」50%」
android:ration=」3000″ />
fromDegrees 為動畫起始時物件的角度 說明
當角度為負數——表示逆時針旋轉
當角度為正數——表示順時針旋轉
(負數from——to正數:順時針旋轉)
(負數from——to負數:逆時針旋轉)
(正數from——to正數:順時針旋轉)
(正數from——to負數:逆時針旋轉)
toDegrees 屬性為動畫結束時物件旋轉的角度 可以大於360度
pivotX
pivotY 為動畫相對於物件的X、Y坐標的開始位 說明:以上兩個屬性值 從0%-100%中取值
50%為物件的X或Y方向坐標上的中點位置

按照上面的講述學習完了Tween Animation的定義,對Tween Animation有了詳細的了解,再去了解下Android SDK的animation package(android.view.animation),其提供了操作Tween Animation所有的類。

Android SDK提供了基類:Animation,包含大量的set/getXXXX()函數來設置、讀取Animation的屬性,也就是前面表一中顯示的各種屬性。Tween Animation由4種類型:alpha、scale、translate、roate,在Android SDK中提供了相應的類,Animation類派生出了AlphaAnimation、ScaleAnimation、TranslateAnimation、RotateAnimation分別實現了平移、旋轉、改變 Alpha 值等動畫,每個子類都在父類的基礎上增加了各自獨有的屬性。再去看下這幾個類的構造函數,是不是與我們在表二、表三、表四、表五種定義的屬性完全一樣。

在了解了Tween Animation的定義,對android.view.animation有了一些基本的認識後,開始介紹Tween Animation如何使用。Android SDK提供了2種方法:1、直接從XML資源中讀取Animation;2、使用Animation子類的構造函數來初始化Animation對象。第二種方法在看了Android SDK中各個類的說明就知道如何使用了,下面簡要說明從XML資源中讀取Animation,按照應用程序開發的過程,介紹整個使用的過程,如下:

1.創建Android工程;
2.導入一張圖片資源;
3.在res/layout/main.xml中添加一個 ImageView Widget;
4.在res下創建新的文件夾且命名為:anim,並在此文件夾下面定義 Animation XML 文件;
5.修改OnCreate()中的代碼,顯示動畫資源;
關鍵代碼,解析如下:

//main.xml中的ImageView

ImageView spaceshipImage = (ImageView) findViewById(R.id.spaceshipImage);

//載入動畫

Animation hyperspaceJumpAnimation =

AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);

//使用ImageView顯示動畫

spaceshipImage.startAnimation(hyperspaceJumpAnimation);

這里簡要解析如下:

•AnimationUtils提供了載入動畫的函數,除了函數loadAnimation(),其他的到Android SDK中去詳細了解吧;
•所謂的動畫,也就是對 view 的內容做一次圖形變換;
Android 中的 Animation 應用(二)

對Tween Animation的本質做個總結:Tween Animation通過對 View 的內容完成一系列的圖形變換 (包括平移、縮放、旋轉、改變透明度)來實現動畫效果。具體來講,預先定義一組指令,這些指令指定了圖形變換的類型、觸發時間、持續時間。這些指令可以是以 XML 文件方式定義,也可以是以源代碼方式定義。程序沿著時間線執行這些指令就可以實現動畫效果。

在這里,我們需要對2個問題進行深入的解析:

•動畫的運行時如何控制的?
•動畫的運行模式。
如何控制動畫的運行?
這個問題,我們也就也就是上一篇幅中提到的Tween Animation,估計大家對什麼是Interpolator、到底有什麼作用,還是一頭霧水,在這里做個詳細的說明。按照Android SDK中對interpolator的說明:interpolator定義一個動畫的變化率(the rate of change)。這使得基本的動畫效果(alpha, scale, translate, rotate)得以加速,減速,重復等。

用通俗的一點的話理解就是:動畫的進度使用 Interpolator 控制。Interpolator 定義了動畫的變化速度,可以實現勻速、正加速、負加速、無規則變加速等。Interpolator 是基類,封裝了所有 Interpolator 的共同方法,它只有一個方法,即 getInterpolation (float input),該方法 maps a point on the timeline to a multiplier to be applied to the transformations of an animation。Android 提供了幾個 Interpolator 子類,實現了不同的速度曲線,如下:

在動畫開始與介紹的地方速率改變比較慢,在中間的時候加速
AccelerateInterpolator 在動畫開始的地方速率改變比較慢,然後開始加速
CycleInterpolator 動畫循環播放特定的次數,速率改變沿著正弦曲線
DecelerateInterpolator 在動畫開始的地方速率改變比較慢,然後開始減速
LinearInterpolator 在動畫的以均勻的速率改變

對於 LinearInterpolator ,變化率是個常數,即 f (x) = x.

public float getInterpolation(float input) {

return input;
}
Interpolator其他的幾個子類,也都是按照特定的演算法,實現了對變化率。還可以定義自己的 Interpolator 子類,實現拋物線、自由落體等物理效果。

動畫的運行模式
動畫的運行模式有兩種:

•獨占模式,即程序主線程進入一個循環,根據動畫指令不斷刷新屏幕,直到動畫結束;
•中斷模式,即有單獨一個線程對時間計數,每隔一定的時間向主線程發通知,主線程接到通知後更新屏幕;
額外補充說明:Transformation 類
Transformation 記錄了仿射矩陣 Matrix,動畫每觸發一次,會對原來的矩陣做一次運算, View 的 Bitmap 與這個矩陣相乘就可實現相應的操作(旋轉、平移、縮放等)。Transformation 類封裝了矩陣和 alpha 值,它有兩個重要的成員,一是 mMatrix,二是 mAlpha。Transformation 類圖如下所示:

總結說明
圖形變換通過仿射矩陣實現。圖形變換是圖形學中的基本知識,簡單來講,每種變換都是一次矩陣運算。在 Android 中,Canvas 類中包含當前矩陣,當調用 Canvas.drawBitmap (bmp, x, y, Paint) 繪制時,Android 會先把 bmp 做一次矩陣運算,然後將運算的結果顯示在 Canvas 上。這樣,編程人員只需不斷修改 Canvas 的矩陣並刷新屏幕,View 里的對象就會不停的做圖形變換,因此就形成了動畫。

Android 中的 Animation 應用(三)

前面我們詳細介紹了Tween Aniamation,這節我將介紹另外一種動畫Frame Animation。在前面已經說過,Frame Animation是順序播放事先做好的圖像,與電影類似。不同於animation package, Android SDK提供了另外一個類AnimationDrawable來定義、使用Frame Animation。

Frame Animation可以在XML Resource定義(還是存放到res/anim文件夾下),也可以使用AnimationDrawable中的API定義。由於Tween Animation與Frame Animation有著很大的不同,因此XML定義的格式也完全不一樣,其格式是:首先是animation-list根節點,animation-list根節點中包含多個item子節點,每個item節點定義一幀動畫:當前幀的drawable資源和當前幀持續的時間。下面對節點的元素加以說明:

XML屬性 說明
drawable 當前幀引用的drawable資源
ration 當前幀顯示的時間(毫秒為單位)
oneshot 如果為true,表示動畫只播放一次停止在最後一幀上,如果設置為false表示動畫循環播放。
variablePadding If true, allows the drawable』s padding to change based on the current state that is selected.
visible 規定drawable的初始可見性,默認為flase;

下面就給個具體的XML例子,來定義一幀一幀的動畫:

<animation-list xmlns:android=」http://schemas.android.com/apk/res/android」
android:oneshot=」true」>
<item android:drawable=」@drawable/rocket_thrust1″ android:ration=」200″ />
<item android:drawable=」@drawable/rocket_thrust2″ android:ration=」200″ />
<item android:drawable=」@drawable/rocket_thrust3″ android:ration=」200″ />
</animation-list>

上面的XML就定義了一個Frame Animation,其包含3幀動畫,3幀動畫中分別應用了drawable中的3張圖片:rocket_thrust1,rocket_thrust2,rocket_thrust3,每幀動畫持續200毫秒。

然後我們將以上XML保存在res/anim/文件夾下,命名為rocket_thrust.xml,顯示動畫的代碼,如下:在OnCreate()中增加如下代碼:

ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image);

rocketImage.setBackgroundResource(R.anim.rocket_thrust);

rocketAnimation = (AnimationDrawable) rocketImage.getBackground();

最後還需要增加啟動動畫的代碼:

public boolean onTouchEvent(MotionEvent event) {

if (event.getAction() == MotionEvent.ACTION_DOWN) {

rocketAnimation.start();

return true;

}

return super.onTouchEvent(event);
}

代碼運行的結果想必大家應該就知道了(3張圖片按照順序的播放一次),不過有一點需要強調的是:啟動Frame Animation動畫的代碼rocketAnimation.start(); 不能在OnCreate()中,因為在OnCreate()中AnimationDrawable還沒有完全的與ImageView綁定,在OnCreate()中啟動動畫,就只能看到第一張圖片。
下面,閱讀Android SDK中對AnimationDrawable的介紹,有個簡單的了解:

AnimationDrawable

獲取、設置動畫的屬性
int getDuration() 獲取動畫的時長
int getNumberOfFrames() 獲取動畫的幀數
boolean isOneShot()

Void setOneShot(boolean oneshot)
獲取oneshot屬性
設置oneshot屬性
void inflate(Resurce r,XmlPullParser p,
AttributeSet attrs)
增加、獲取幀動畫
Drawable getFrame(int index) 獲取某幀的Drawable資源
void addFrame(Drawable frame,int ration) 為當前動畫增加幀(資源,持續時長)
動畫控制
void start() 開始動畫
void run() 外界不能直接掉調用,使用start()替代
boolean isRunning() 當前動畫是否在運行
void stop() 停止當前動畫

總結說明

Frame Animation的定義、使用比較簡單,在這里已經詳細介紹完了,更加深入的學習還是到Android SDK去仔細了解吧,在Android SDK中也包含很多這方面的例子程序。註:Frame Animation 的XML 文件中不定義 interpolator 屬性,因為定義它沒有任何意義。

❼ Android 中的動畫有哪幾類,它們的特點和區別是什麼

1.View Animation(Tween Animation):補間動畫,給出兩個關鍵幀,通過一些演算法將給定屬性值在給定的時間內在兩個關鍵幀間漸變。
View animation只能應用於View對象,而且只支持一部分屬性,這種實現方式可以使視圖組件移動、放大、縮小以及產生透明度的變化.

2.Frame動畫,傳統的動畫方法,通過順序的播放排列好的圖片來實現,類似電影補間動畫和幀動畫。
補間動畫和Frame動畫的定義:
所謂補間動畫,是指通過指定View的初末狀態和變化時間、方式,對View的內容完成一系列的圖形變換來實現動畫效果。主要包括四種效果:Alpha、Scale、Translate和Rotate。
幀動畫就是Frame動畫,即指定每一幀的內容和停留時間,然後播放動畫。。

3.屬性動畫
只是一個動畫效果,組件其實還在原來的位置上,xy沒有改變
###位移:
第一個參數target指定要顯示動畫的組件
第二個參數propertyName指定要改變組件的哪個屬性
第三個參數values是可變參數,就是賦予屬性的新的值
傳入0,代表x起始坐標:當前x + 0
傳入100,代表x終點坐標:當前x + 100
//具有get、set方法的成員變數就稱為屬性
ObjectAnimator oa = ObjectAnimator.ofFloat(bt, "translationX", 0, 100) ;

4.四種基本的動畫 ,透明/伸縮/移動/旋轉。

(1)XML中

alpha 漸變透明度動畫效果

scale 漸變尺寸伸縮動畫效果
translate畫面轉換位置移動動畫效果
rotate畫面轉移旋轉動畫效果
(2) javaCode中

AlphaAnimation漸變透明度動畫效果
ScaleAnimation漸變尺寸伸縮動畫效果
TranslateAnimation畫面轉換位置移動動畫效果
RotateAnimation畫面轉移旋轉動畫效果
(3)Android動畫模式
Animation主要有兩種動畫模式:
一種是tweened animation(漸變動畫)

一種是frame by frame(畫面轉換動畫)

Tween動畫,這種實現方式可以使視圖組件移動、放大、縮小以及產生透明度的變化;
Frame動畫,傳統的動畫方法,通過順序的播放排列好的圖片來實現,類似電影。

❽ android中的動畫有哪幾類

在Android3.0(即API Level11)以前,Android僅支持2種動畫:分別是Frame Animation(逐幀動畫)和Tween Animation(補間動畫),在3.0之後Android支持了一種新的動畫系統,稱為:Property Animation(屬性動畫)。

一、Frame Animation:(逐幀動畫)

這個很好理解,一幀幀的播放圖片,利用人眼視覺殘留原理,給我們帶來動畫的感覺。它的原理的GIF圖片、電影播放原理一樣。

1.定義逐幀動畫比較簡單,只要在中使用子元素定義所有播放幀即可。

(1) android:oneshot 設置是否僅播放一次

(2) android:drawable 設置每一幀圖片

(3) android:ration 設置圖片間切換間隔

2.習慣上把AnimationDrawable設置為ImageView的背景

android:background=@anim/frame_anim

然後我們就可以在java代碼中獲取AnimationDrawable對象了

AnimationDrawable anim = (AnimationDrawable)imageView.getBackground();

(需要注意的是,AnimationDrawable默認是不播放的,調用其start()方法開始播放,stop停止播放)

3.上面的動畫文件是通過xml文件來配置的,如果你喜歡,也可以通過在java代碼中創建AnimationDrawable對象,然後通過addFrame(Drawable frame, int ration)方法向動畫添加幀,然後start()。。。

二、Tween Animation:(補間動畫)

補間動畫就是我們只需指定開始、結束的「關鍵幀「,而變化中的其他幀由系統來計算,不必自己一幀幀的去定義。

1. Android使用Animation代表抽象動畫,包括四種子類:AlphaAnimation(透明度動畫)、ScaleAnimation(縮放動畫)、TranslateAnimation(位移動畫)、RotateAnimation(透明度動畫)。Android裡面允許在java中創建Animation類對象,但是一般都會採用動畫資源文件來定義動畫,把界面與邏輯分離

<set android:interpolator="@android:anim/linear_interpolator" xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 定義透明度的變換 -->

<!-- 定義旋轉變換 -->
<rotate android:ration="3000/" android:fromdegrees="0" android:pivotx="50%" android:pivoty="50%" android:todegrees="1800">
</rotate></alpha></set>

(一個set可以同時定義多個動畫,一起執行。)

2. android:interpolator=@android:anim/linear_interpolator控制動畫期間需要補入多少幀,簡單來說就是控制動畫速度,有些地方翻譯為「插值「。Interpolator有幾種實現類:LinearInterpolator、AccelerateInterpolator、、CycleInterpolator、DecelerateInterpolator,具體使用可以參考官方API Demo。

3. 定義好anim文件後,我們可以通過AnimationUtils工具類來載入它們,載入成功後返回一個Animation。然後就可以通過View的startAnimation(anim)開始執行動畫了。

Animation anim = AnimationUtils.loadAnimation(this, R.anim.anim);
//設置動畫結束後保留結束狀態
anim.setFillAfter(true);
//設置插值效果
anim.setInterpolator(interpolator);
//對view執行動畫
view. startAnimation(anim);

三、Property Animation:(屬性動畫)

屬性動畫,這個是在Android 3.0中才引進的,它可以直接更改我們對象的屬性。在上面提到的Tween Animation中,只是更改View的繪畫效果而View的真實屬性是不改變的。假設你用Tween動畫將一個Button從左邊移到右邊,無論你怎麼點擊移動後的Button,他都沒有反應。而當你點擊移動前Button的位置時才有反應,因為Button的位置屬性木有改變。而Property Animation則可以直接改變View對象的屬性值,這樣可以讓我們少做一些處理工作,提高效率與代碼的可讀性。

(1)ValueAnimator:包含Property Animation動畫的所有核心功能,如動畫時間,開始、結束屬性值,相應時間屬性值計算方法等。應用ValueAnimator有兩個步驟

1計算屬性值。

2根據屬性值執行相應的動作,如改變對象的某一屬性。

我們的主是第二步,需要實現ValueAnimator.onUpdateListener介面,這個介面只有一個函數onAnimationUpdate(),將要改變View對象屬性的事情在該介面中do。

animation.addUpdateListener(new AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
//do your work
}
});

(2)ObjectAnimator:繼承自ValueAnimator,要指定一個對象及該對象的一個屬性,當屬性值計算完成時自動設置為該對象的相應屬性,即完成了Property Animation的全部兩步操作。實際應用中一般都會用ObjectAnimator來改變某一對象的某一屬性,但用ObjectAnimator有一定的限制,要想使用ObjectAnimator,應該滿足以下條件:

1.對象應該有一個setter函數:set(駝峰命名法)

2如下面的例子,像ofFloat之類的工場方法,第一個參數為對象名,第二個為屬性名,後面的參數為可變參數,如果values…參數只設置了一個值的話,那麼會假定為目的值,屬性值的變化范圍為當前值到目的值,為了獲得當前值,該對象要有相應屬性的getter方法:get

3如果有getter方法,其應返回值類型應與相應的setter方法的參數類型一致。

ObjectAnimator oa=ObjectAnimator.ofFloat(tv, alpha, 0f, 1f);
oa.setDuration(3000);
oa.start();

如果不滿足上面的條件,我們只能乖乖的使用ValueAnimator來創建動畫。

(3)Animator.AnimatorListener:可以為Animator設置動畫監聽,需要重寫下面四個方法。

onAnimationStart()
onAnimationEnd()
onAnimationRepeat()
onAnimationCancel()

這里我們也可以實現AnimatorListenerAdapter,他的好處是可以只用定義想監聽的事件而不用實現每個函數卻只定義一空函數體。如下:

anim.addListener(new AnimatorListenerAdapter() {
public void on AnimationEnd(Animator animation){
//do your work
}
});

(4)AnimationSet:可以組合多個動畫共同工作

AnimatorSet bouncer = new AnimatorSet();
bouncer.play(anim1).before(anim2);
bouncer.play(anim2).with(anim3);
bouncer.play(anim2).with(anim4)
bouncer.play(anim5).after(amin2);
animatorSet.start();

上面的代碼意思是: 首先播放anim1;同時播放anim2,anim3,anim4;最後播放anim5。

(5)TimeInterplator:與Tween中的interpolator類似。有以下幾種

AccelerateInterpolator 加速,開始時慢中間加速

DecelerateInterpolator 減速,開始時快然後減速

先加速後減速,開始結束時慢,中間加速

AnticipateInterpolator 反向 ,先向相反方向改變一段再加速播放

反向加回彈,先向相反方向改變,再加速播放,會超出目的值然後緩慢移動至目的值

BounceInterpolator 跳躍,快到目的值時值會跳躍,如目的值100,後面的值可能依次為85,77,70,80,90,100

CycleIinterpolator 循環,動畫循環一定次數,值的改變為一正弦函數:Math.sin(2 * mCycles * Math.PI * input)

LinearInterpolator 線性,線性均勻改變

OvershottInterpolator 回彈,最後超出目的值然後緩慢改變到目的值

TimeInterpolator 一個介面,允許你自定義interpolator,以上幾個都是實現了這個介面

(6)Keyframes:可以讓我們定義除了開始和結束以外的關鍵幀。KeyFrame是抽象類,要通過ofInt(),ofFloat(),ofObject()獲得適當的KeyFrame,然後通過PropertyValuesHolder.ofKeyframe獲得PropertyValuesHolder對象,如下:

Keyframe kf0 = Keyframe.ofInt(0, 400);
Keyframe kf1 = Keyframe.ofInt(0.25f, 200);
Keyframe kf2 = Keyframe.ofInt(0.5f, 400);
Keyframe kf4 = Keyframe.ofInt(0.75f, 100);
Keyframe kf3 = Keyframe.ofInt(1f, 500);
PropertyValuesHolder pvhRotation = PropertyValuesHolder.ofKeyframe(width, kf0, kf1, kf2, kf4, kf3);
ObjectAnimator rotationAnim = ObjectAnimator.ofPropertyValuesHolder(btn, pvhRotation);
上述代碼的意思是:設置btn對象的width屬性值使其:開始時 Width=400,動畫開始1/4時 Width=200,動畫開始1/2時 Width=400,動畫開始3/4時 Width=100,動畫結束時 Width=500。

(7)ViewPropertyAnimator:對一個View同時改變多種屬性,非常推薦用這種。該類對多屬性動畫進行了優化,會合並一些invalidate()來減少刷新視圖。而且使用起來非常簡便,但是要求API LEVEL 12,即Android 3.1以上。僅需要一行代碼即可完成水平、豎直移動

myView.animate().translationX(50f). translationY(100f);

(8)常需要改變的一些屬性:

translationX,translationY: View相對於原始位置的偏移量

rotation,rotationX,rotationY: 旋轉,rotation用於2D旋轉角度,3D中用到後兩個

scaleX,scaleY: 縮放比

x,y: View的最終坐標,是View的left,top位置加上translationX,translationY

alpha: 透明度

四、最後自己總結一下這三種動畫的優缺點:

(1)Frame Animation(幀動畫)主要用於播放一幀幀准備好的圖片,類似GIF圖片,優點是使用簡單方便、缺點是需要事先准備好每一幀圖片;

(2)Tween Animation(補間動畫)僅需定義開始與結束的關鍵幀,而變化的中間幀由系統補上,優點是不用准備每一幀,缺點是只改變了對象繪制,而沒有改變View本身屬性。因此如果改變了按鈕的位置,還是需要點擊原來按鈕所在位置才有效。

(3)Property Animation(屬性動畫)是3.0後推出的動畫,優點是使用簡單、降低實現的復雜度、直接更改對象的屬性、幾乎可適用於任何對象而僅非View類,缺點是需要3.0以上的API支持,限制較大!但是目前國外有個開源庫,可以提供低版本支持!

閱讀全文

與android正弦動畫相關的資料

熱點內容
androidapp風格 瀏覽:206
php取伺服器url地址 瀏覽:291
linux時間調度演算法 瀏覽:767
單片機最小電路詳解 瀏覽:181
請求要求命令 瀏覽:802
電腦文件夾發微信顯示被佔用 瀏覽:289
手機怎麼看加密視頻 瀏覽:202
怎樣解壓手機es文件包 瀏覽:661
2017年學什麼編程 瀏覽:934
金融期貨pdf 瀏覽:692
程序員客棧的信息保密嗎 瀏覽:507
編程顯示器什麼意思 瀏覽:146
網路編程的就業 瀏覽:260
s7200編程入門 瀏覽:748
華潤萬家app為什麼進不去 瀏覽:250
後台運行app命令 瀏覽:874
通達信雲加密能破解 瀏覽:141
郵件保存成pdf 瀏覽:867
bbs網站java源碼下載百度雲 瀏覽:460
php無限極分類樹 瀏覽:275