導航:首頁 > 操作系統 > android動畫有哪幾種

android動畫有哪幾種

發布時間:2025-03-05 13:47:16

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中的幾種動畫

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

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

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

⑶ Carson帶你學Android:常見的三種動畫類型

Android 動畫主要分為分為兩大類(三種):

下面。我將簡單介紹這兩大類、三種 Android 常用動畫

根據不同的動畫效果,補間動畫分為4種動畫:

具體效果分別如下:

較為復雜的個性化動畫效果。

將動畫拆分後的圖片幀

在 Android 3.0 ( API 11 )後才提供的一種全新動畫模式

與屬性相關、更加復雜的動畫效果。

不定期分享關於 安卓開發 的干貨,追求 短、平、快 ,但 卻不缺深度

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

android動畫有兩類:
一種是tweened animation(漸變動畫)
一種是frame by frame(逐幀動畫)
特點:
漸變動畫是通過改變view的大小、旋轉的角度、透明度、位置來產生動畫,可以控制動畫的播放快慢以及加速度。
逐幀動畫是用一組圖片輪流繪制,產生動畫的感覺。類似於gif圖片。
區別:
漸變動畫的所有操作是通過矩陣變換對同一個物體(繪制的一個view或者圖片)進行操作產生動畫。
而逐幀動畫是多個物體(多張圖片)進行繪制,可以說這多張圖片是不相關的(從播放的角度來看只能說是內容相關)。

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

Android包含三種動畫:

ViewAnimation、 Drawable Animation、Property Animation。

ViewAnimation(Tween Animation補間動畫):


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

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

Android平台支持兩種主要類型的動畫:Tween動畫和Frame動畫。Tween動畫是一種高效且靈活的動畫技術,能夠實現視圖組件的平滑過渡,包括但不限於位置、大小和透明度的變化。通過調整關鍵幀參數,開發者可以輕松控制動畫效果,使應用界面更加生動有趣。

相比之下,Frame動畫則採用更為傳統的實現方式,通過一系列預設的圖片順序播放來模擬動畫效果。這種方法類似於早期的電影製作技術,每一幀都是獨立的靜態圖像,通過快速切換這些幀來產生連續的動態效果。Frame動畫通常用於實現復雜的過渡效果或特定的視覺效果,尤其是在需要精確控制每一幀內容時。

Tween動畫因其流暢性和易用性,在現代Android應用開發中得到了廣泛的應用。它能夠通過插值計算自動調整物體在不同關鍵幀之間的狀態,從而實現平滑的動畫效果。開發者只需定義起始和結束狀態,Tween動畫引擎便會自動計算出中間狀態的變化,簡化了復雜的動畫編程過程。

而Frame動畫則更適用於需要逐幀精細控制的場景。例如,當需要實現復雜的字元變形或特效時,開發者可以手動製作一系列圖像幀,通過精確控制每一幀的內容和顯示時間來實現所需的效果。盡管這種方法較為繁瑣,但它提供了更高的靈活性和控制度,可以實現更為復雜和精細的動畫效果。

綜上所述,這兩種動畫類型各有千秋,適用於不同的場景和需求。選擇合適的動畫類型不僅能夠提升用戶體驗,還能優化應用的性能。開發者在實際項目中應根據具體需求,靈活選擇合適的動畫技術,以達到最佳效果。

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

在Android中,動畫技術的運用為用戶界面增添了生動性和交互性。動畫可以分為兩種主要類型:補間動畫和幀動畫。

補間動畫通過指定一個View的初始狀態和目標狀態,以及動畫變化的時間和方式,來實現圖形內容的動態變化。這種動畫效果主要包含四種:Alpha動畫調整透明度,Scale動畫改變大小,Translate動畫實現位置移動,Rotate動畫進行旋轉。

相比之下,幀動畫採用預先定義的一系列圖像幀,每幀對應動畫的一個特定時間點,通過連續播放這些圖像幀來構成動畫效果。每幀之間的切換時間由開發者設定,以此來控制動畫的流暢度和速度。

補間動畫和幀動畫在實現動畫效果時各有優勢。補間動畫通過動態計算實現平滑過渡,適用於需要自然流暢變化的動畫場景;而幀動畫通過直接播放預定義的圖像序列,適用於需要精確控制每一幀內容和播放速度的動畫設計。

理解這兩種動畫類型的特點與區別對於在Android應用開發中高效利用動畫技術至關重要。補間動畫適合實現自然流暢的動畫效果,而幀動畫則適用於需要精確控制每一幀的動畫場景。根據具體需求和場景選擇合適的動畫類型,可以有效提升用戶界面的交互性和視覺體驗。

⑻ 如何通過android實現alpha漸變動畫效果

Android動畫分為四種:alpha(漸變透明度),scale(漸變尺寸伸縮),translate(畫面轉換位置移動),rotate(畫面轉移旋轉);今天先寫第一個動畫alpha。
動畫效果有兩種實現:
一、在xml中定義:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 透明度控制動畫效果 alpha
浮點型值:
fromAlpha 屬性為動畫起始時透明度
toAlpha 屬性為動畫結束時透明度
說明:
0.0表示完全透明
1.0表示完全不透明
以上值取0.0-1.0之間的float數據類型的數字

長整型值:
ration 屬性為動畫持續時間
說明:
時間以毫秒為單位
-->

<alpha
android:fromAlpha="0.1"
android:toAlpha="1.0"
android:ration="5000"
/>

</set>
二、在頁面Activity中聲明:
Animation animation = new AlphaAnimation(0.1f, 1.0f);
animation.setDuration(5000);

完成動畫漸變透明度的參數設定後,我們就要開始在應用中使用它:
public class SplashActivity extends Activity{

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.welcome);

View view = View.inflate(SplashActivity.this, R.layout.welcome, null);
setContentView(view);
//動畫效果參數直接定義
Animation animation = new AlphaAnimation(0.1f, 1.0f);
animation.setDuration(5000);

//動畫效果從XMl文件中定義
// Animation animation = AnimationUtils.loadAnimation(this, R.anim.alpha);
view.setAnimation(animation);
}
}
這樣我們就完成了預定的動畫效果,但是我們的最終目的是動畫效果完畢以後跳轉到相應的頁面,所以我們對動畫添加了監聽:
animation.setAnimationListener(new AnimationListener() {

@Override
public void onAnimationStart(Animation animation) {
// TODO Auto-generated method stub

}

@Override
public void onAnimationRepeat(Animation animation) {
// TODO Auto-generated method stub

}

@Override
public void onAnimationEnd(Animation animation) {
// TODO Auto-generated method stub
Intent intent = new Intent(SplashActivity.this,MainActivity.class);
startActivity(intent);
}
});
這樣的話,我們在動畫的持續時間中預載入我們的資源,當動畫結束以後跳轉到我們的主頁面;
詳細步驟和完整源碼可以參考:http://www.cnblogs.com/sishuiliuyun/p/3167581.html

閱讀全文

與android動畫有哪幾種相關的資料

熱點內容
手機下拉欄背景文件夾 瀏覽:693
單片機萬年歷設計 瀏覽:998
攻是程序員大佬 瀏覽:145
下載app下在哪個盤 瀏覽:345
演算法創新是什麼 瀏覽:946
低學歷程序員能改行嗎 瀏覽:627
岳飛傳pdf 瀏覽:763
androidstudio安卓版 瀏覽:152
北京暑假班編程哪裡招學員 瀏覽:705
android通知欄跳轉 瀏覽:566
孩子酸爽解壓視頻 瀏覽:328
蘇有朋泡沫哪個app可以聽 瀏覽:305
程序員被嫌棄後續 瀏覽:822
iannotatepdf 瀏覽:506
android仿日歷控制項 瀏覽:508
怎麼在d盤快捷建立文件夾 瀏覽:75
二叉樹演算法應用 瀏覽:713
用命令行運行java 瀏覽:177
有哪些只有程序員才懂的梗 瀏覽:523
數控車削編程與加工報告 瀏覽:191