Android日常學習:Android檢視動畫-View Animation
介紹
檢視動畫主要有兩種:
一、
Tween Animation
譯為“補間動畫”
1、
scale
譯為“規模、比例”,是對View進行特定範圍的縮放
2、
alpha
透過改變View的透明度實現View隱現的效果
3、
translate
譯為"轉移",是對View進行位置的移動
4、
rotate
譯為“旋轉”,是讓View圍繞特定的點進行旋轉
PS:所有View的移動、隱藏、旋轉僅僅是看到的動畫效果,實際View的位置/大小/比例並沒有發生本質上的改變(比如說View的位置透過動畫進行移動後你註冊的點選事件還是需要點選到View的原始位置才可以被觸發)。
二、
Frame Animation
譯為逐幀動畫
這個比較容易理解就是將多個具有特定連貫動作的圖片在短時間內進行快速的切換達到動畫的效果,本質上所有的動畫效果都是這種思想。
如何建立檢視動畫檔案目錄
動畫檔案要存放在res/anim資料夾下,訪問時採用R.anim.XXX的方式。預設是沒有這個資料夾的需要手動建立(右鍵res目錄-->New-->Android Resource Directory-->確定。)
動畫檔案的建立方式為:右鍵
anim
資料夾選擇new,然後點選Animation Resource file,選擇動畫型別即可建立。
輸入後會自動提示動畫名稱,然後輸入名稱,確定即可。
scale(縮放) 動畫
這個動畫引數相對來說比較多, 就我個人而言在學習這個動畫的時候花費時間是最長的。
這個動畫主要是實現View的縮放,首先要想,要實現一個縮放的動畫首先要確定什麼引數/資訊(好比說想切割一張特定大小的紙張要確定寬和高一樣),那麼第一個就是要確定要圍繞哪個點(pivot)進行縮放。
還需要知道在動畫開始(from)時View的大小(比例),以及動畫結束(to)時View要處於的大小(比例)。就是要確定以下六個引數才可以完成一次縮放動畫。
X則指定控制元件的寬度,Y則指定控制元件的高度,值越大則控制元件所佔位置越大。
Android座標從左上角開始算起。
其中
fromXScale
、
toXScale
、
fromYScale
、
toYScale
使用浮點型別,1.0表使原始大小,0.5則是縮放一半,1.5則是擴大原大小的一半。舉例:原View寬高100、150,1.0:(100,150),0.5:(50,75),1.5:(150,225)。也可以使用精確值(DP/PX)。
pivotX
、
pivotY
有三種表使方法,第一是採用畫素值,第二則是較自身的百分比,第三則是較父View的百分比。
為了方便觀察,使用兩個同等位置和大小不同顏色的View來進行觀察。動畫的播放程式碼在最下文已給出。
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android=" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="播放動畫" android:id="@+id/btnOpenAnimation" /> <TextView android:layout_width="300dp" android:layout_height="300dp" android:layout_centerInParent="true" android:layout_gravity="center" android:background="#03A9F4"/> <TextView android:layout_width="300dp" android:layout_height="300dp" android:layout_centerInParent="true" android:id="@+id/txtAnimation" android:layout_gravity="center" android:background="#FF00"/></RelativeLayout>
示例1:使用畫素值確定Pivot點
<?xml version="1.0" encoding="utf-8"?><scale xmlns:android=" android:fromXScale="0.5" android:toXScale="1.0" android:duration="3000" android:fromYScale="0.5" android:toYScale="1.0" android:pivotX="200" android:pivotY="200"></scale>
這裡我們分別設定了
pivotX
和
pivotY
為200(px),這個是從View本身來算起的,View的左上角為(0,0)點,然後X軸座標向右,Y則向下分別走200畫素,最終得到了箭頭指向的點(Pivot),那麼開始點確定了。
再看其它引數,
fromXScale
指定的是在動畫開始時X座標也就是寬度的大小(這裡是按照比例計算的),0.5則代表View原始寬度的一半,
fromYScale
則是高度了。
既然是向特定的比例進行縮放,僅僅確定開始的大小是不夠的,還要確定在動畫播放到最後所要達到的大小,所以就有了
toXScale
和
toYScale
,這兩個則是指定在動畫播放完成後View所處的大小。
這裡我們是從View的0.5縮放到1.0,也就是從原始View的一半經過3秒(
duration
用來控制動畫時長,1000為1秒。)後變成原始View的大小也就是1.0。
示例2:百分比Pivot
使用百分比確定Pivot也很簡單,那麼Pivot的位置就是:以View的左上角即(0,0)點為基礎加上View特定的寬高百分比。
<?xml version="1.0" encoding="utf-8"?><scale xmlns:android=" android:fromXScale="0.0" android:toXScale="1.0" android:duration="5000" android:fromYScale="0.0" android:toYScale="1.0" android:pivotX="70%" android:pivotY="70%"></scale>
示例3:父View百分比Pivot
<?xml version="1.0" encoding="utf-8"?><scale xmlns:android=" android:fromXScale="0.0" android:toXScale="1.0" android:duration="5000" android:fromYScale="0.0" android:toYScale="1.0" android:pivotX="50%p" android:pivotY="50%p"></scale>
這個計算和上邊那個其實是一樣的,只是基於的點不同而已,上邊是基於自身來算起,那麼這個則是基於View的父佈局來計算的。那麼Pivot的位置就是:以View的左上角即(0,0)點為基礎加上父View特定的寬高百分比。
alpha動畫
這個可以說就非常簡單了,主要是實現顏色的過度效果,
fromAlpha
則是動畫開始的透明度,
toAlpha
則是在動畫最後顯示的透明度。0.0代表完全透明1.0則是View的原色。
<?xml version="1.0" encoding="utf-8"?><alpha xmlns:android=" android:fromAlpha="0.0" android:duration="3000" android:toAlpha="1.0"></alpha>
rotate(旋轉) 動畫
首先要想完成旋轉要確定那些引數?肯定要確定旋轉要圍繞的點也就是
pivot
,這個在
scale
動畫也用到了,用法都一樣,不在多說。這裡出現了名為
degrees
也就是角度的概念,也就是以特定點(
pivot
)為中心從多少度(
fromDegrees
),旋轉到多少度(
toDegrees
)。以下示例是從0轉到360度,正好一圈。
<?xml version="1.0" encoding="utf-8"?><rotate xmlns:android=" android:fromDegrees="0" android:toDegrees="360" android:pivotY="50%" android:pivotX="50%" android:duration="3000"></rotate>
translate(位移) 動畫
說白了就是移動View的位置,就是從一個點移動到另一個點,最重要的就是確定兩個點,那麼則需要確定兩對X,Y座標了。
以下引數的使用方式和在最上邊提到的
pivot
是一樣的都可以使用精確值和百分比。
<?xml version="1.0" encoding="utf-8"?><translate xmlns:android=" android:fromXDelta="10%" android:toXDelta="70%" android:fromYDelta="0%" android:toYDelta="70%" android:duration="3000"></translate>
其中黑色線條框住的是View的原始位置,黃色框住的是View動畫開始時的位置,紫色線條則是整個View的70%的佔比,最後集中到的點就是View要移動到的最終的位置也就是結束點。
Set(集合動畫)
如何理解
Set
(集合動畫),其實很簡單,比如現在有一個需求,我們既要旋轉又要有漸漸出現的效果,那麼就要使用
set
了,說白了就是將多個動畫組合起來。只要把上邊幾個都學會了,使用這個
set
簡直so easy。
<?xml version="1.0" encoding="utf-8"?><set xmlns:android=" android:duration="3000"> <alpha android:fromAlpha="0.0" android:toAlpha="1.0" ></alpha> <rotate android:pivotX="50%" android:pivotY="50%" android:fromDegrees="0" android:toDegrees="180" ></rotate></set>
動態建立動畫
上邊所展示的都是透過xml檔案寫的動畫,都是靜態寫好了的。那麼想要動態的建立動畫物件又該如何?其實很簡單,透過程式碼的方式建立動畫它們的名稱和使用xml檔案建立時名稱都是對應的,提供的建構函式也都是必備的引數值。
//建立Alpha動畫var alpha = AlphaAnimation(0.0F, 1.0F) alpha.duration = 3000this.txtAnimation.startAnimation(alpha)//建立Rotate動畫var rotate = RotateAnimation(0F, 360F, Animation.RELATIVE_TO_SELF, 50F, Animation.RELATIVE_TO_SELF, 50F)//建立Scale動畫var scale = ScaleAnimation(0F, 1F, 0F, 1F, Animation.RELATIVE_TO_SELF, 50F, Animation.RELATIVE_TO_SELF, 50F)//建立translate動畫var translate = TranslateAnimation( Animation.RELATIVE_TO_SELF, 10F, Animation.RELATIVE_TO_SELF, 80F, Animation.RELATIVE_TO_SELF, 0F, Animation.RELATIVE_TO_SELF, 70F )//建立Set動畫var set = AnimationSet(this, null) set.duration = 3000set.addAnimation(alpha) set.addAnimation(rotate)
從Animation繼承的屬性
以上所有的動畫物件都是從Animation類繼承來的,所有有一些公共的屬性也會繼承過來。
動畫的播放
//載入動畫this.btnOpenAnimation.setOnClickListener { var animation = AnimationUtils.loadAnimation(this, R.anim.translate_anim) this.txtAnimation.startAnimation(animation) }
Tween Animation(逐幀動畫)
這個是Drawable形式的動畫,存放在drawable資料夾中,使用
animation-list
節點來表示。圖片素材是提前準備好的。自己動手嘗試下馬上就會理解了。
<?xml version="1.0" encoding="utf-8"?><animation-list xmlns:android="> <item android:duration="100" android:drawable="@drawable/a001"></item> <item android:duration="100" android:drawable="@drawable/a002"></item> <item android:duration="100" android:drawable="@drawable/a003"></item> <item android:duration="100" android:drawable="@drawable/a004"></item> <item android:duration="100" android:drawable="@drawable/a005"></item> <item android:duration="100" android:drawable="@drawable/a006"></item> <item android:duration="100" android:drawable="@drawable/a007"></item> <item android:duration="100" android:drawable="@drawable/a008"></item> <item android:duration="100" android:drawable="@drawable/a009"></item> <item android:duration="100" android:drawable="@drawable/a010"></item> <item android:duration="100" android:drawable="@drawable/a011"></item> <item android:duration="100" android:drawable="@drawable/a012"></item> <item android:duration="100" android:drawable="@drawable/a013"></item> <item android:duration="100" android:drawable="@drawable/a014"></item> <item android:duration="100" android:drawable="@drawable/a015"></item> <item android:duration="100" android:drawable="@drawable/a016"></item> <item android:duration="100" android:drawable="@drawable/a017"></item> <item android:duration="100" android:drawable="@drawable/a018"></item></animation-list>
這裡我們給一個TextView設定了
background
屬性。
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android=" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="播放動畫" android:id="@+id/btnOpenAnimation" /> <TextView android:layout_width="300dp" android:layout_height="300dp" android:layout_centerInParent="true" android:id="@+id/txtAnimation" android:background="@drawable/anim_refresh" android:layout_gravity="center" /></RelativeLayout>
具體呼叫
var animationDrawable = this.txtAnimation.background as AnimationDrawable animationDrawable.start()
顯示效果
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69952849/viewspace-2663910/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Android檢視動畫集合AndoridViewAnimationsAndroid動畫View
- Android備忘錄《View動畫(補間動畫)》AndroidView動畫
- Android 補間動畫學習Android動畫
- Android自定義View播放Gif動畫AndroidView動畫
- Android 自定義View之下雨動畫AndroidView動畫
- Android 動畫詳解:屬性動畫、View 動畫和幀動畫Android動畫View
- Android 自定義View:屬性動畫(六)AndroidView動畫
- Android日常學習:Android Hook技術小實踐AndroidHook
- Android日常學習:如何高效 & 正確地獲取View的座標位置?AndroidView
- 【Android 動畫】動畫詳解之仿微信檢視大圖效果(四)Android動畫
- 系統學習iOS動畫之一:檢視動畫iOS動畫
- Android基礎夯實–重溫動畫(三)之初識Property AnimationAndroid動畫
- Android動畫Android動畫
- android 動畫Android動畫
- 【Android】 給我一個Path,還你一個動畫ViewAndroid動畫View
- Android Animation 執行原理Android
- Android 動畫:這是一份詳細 & 清晰的 動畫學習指南Android動畫
- Android 動畫初探Android動畫
- Android之動畫Android動畫
- Android XML佈局報錯:android/view/View$OnUnhandledKeyEventListenerAndroidXMLView
- [Android]多層波紋擴散動畫——自定義View繪製Android動畫View
- HenCoder Android 自定義 View 1-6: 屬性動畫(上手篇)AndroidView動畫
- CSS animation 動畫CSS動畫
- Android學習開發(問題解決)——android Unable to inflate view tag without class attributeAndroidView
- Android View篇之啟動頁倒數計時動畫的實現AndroidView動畫
- Android 動畫之屬性動畫Android動畫
- Android自定義View:View(二)AndroidView
- Android 轉場動畫Android動畫
- Android 動畫實現Android動畫
- android屬性動畫Android動畫
- Android:動畫詳解Android動畫
- Android 補間動畫Android動畫
- Android 幀動畫使用Android動畫
- Android 自定義View 滑動解鎖AndroidView
- Android學習—— Android佈局Android
- Flutter動畫之AnimationFlutter動畫
- Android View post 方法AndroidView
- 圖解Android - Android GUI 系統 (2) - 視窗管理 (View, Canvas, Window Manager)圖解AndroidGUIViewCanvas