1. 程式人生 > >Android動畫框架(一)----檢視動畫&幀動畫

Android動畫框架(一)----檢視動畫&幀動畫

Android提供三種形式動畫:檢視動畫,幀動畫,屬性動畫。其中屬性動畫的功能最強大,在android 3.0中開始引入。本文介紹檢視動畫和幀動畫的使用技巧。

1 檢視動畫(View Animation)

Android的檢視動畫可以完成一系列的補間動畫(Tween Animation),如平移,縮放,旋轉,透明度變化等。檢視動畫是針對View的內容(content),因此,當View發生檢視動畫後,其響應事件的位置還是在動畫之前的地方,檢視動畫僅僅改變的是View的內容的展示(如針對Button的平移動畫,將Button的中心從A點移動到B點,動畫完成後Button在B點顯示,但如果要點選Button,還是得點A點區域,而不是點B點區域)。Android提供兩種方式來定義動畫:XML和Android Code(寫程式碼的形式),推薦使用XML方式,因為可讀性更好。下面分別介紹這兩種檢視動畫的使用:

1.1 XML方式

XML定義檢視動畫的語法如下:

  1. <?xmlversion="1.0"encoding="utf-8"?><setxmlns:android="http://schemas.android.com/apk/res/android"
  2.     android:interpolator="@[package:]anim/interpolator_resource"
  3.     android:shareInterpolator=["true" | "false"] >
  4. <alpha
  5.         android:interpolator
    ="@android:anim/accelerate_decelerate_interpolator"
  6.         android:fromAlpha="float"
  7.         android:toAlpha="float"/>
  8.     <scale
  9.         android:fromXScale="float"
  10.         android:toXScale="float"
  11.         android:fromYScale="float"
  12.         android:toYScale="float"
  13.         android:pivotX
    ="float"
  14.         android:pivotY="float"/>
  15.     <translate
  16.         android:fromXDelta="float"
  17.         android:toXDelta="float"
  18.         android:fromYDelta="float"
  19.         android:toYDelta="float"/>
  20.     <rotate
  21.         android:fromDegrees="float"
  22.         android:toDegrees="float"
  23.         android:pivotX="float"
  24.         android:pivotY="float"/>
  25.     <set>
  26.         ...  
  27.     </set>
  28. </set>

<alpha>, <scale>, <translate>, <rotate>四個標籤分別對應透明度、縮放、平移、旋轉四種形式的檢視動畫,<set>用來定義一組或多組動畫,它們分別對應AlphaAnimationScaleAnimationTranslateAnimationRotateAnimationAnimationSet五個類。下面介紹幾個重要的屬性:

<set>標籤

1)android:interpolator----動畫集合使用的差值器,如線性差值器(如平移動畫中X座標隨時間線性變化),預設為@androidanim/accelerate_decelerate_interpolator,即加速減速差值器;

2)android:shareInterpolator----它的值是一個boolean值,表示集合中的動畫是否共享同一個差值器。如果不共享同一個差值器,每個動畫可以定義自己的使用的差值器。

系統提供的差值器如下表,當然我們也可以定義自己的差值器。

Interpolator class

Resource ID

@android:anim/accelerate_decelerate_interpolator

@android:anim/accelerate_interpolator

@android:anim/anticipate_interpolator

@android:anim/anticipate_overshoot_interpolator

@android:anim/bounce_interpolator

@android:anim/cycle_interpolator

@android:anim/decelerate_interpolator

@android:anim/linear_interpolator

@android:anim/overshoot_interpolator

<alpha>標籤

1)android:fromAlpha----float型別,表示透明度alpha的起始值,如0表示完全透明,1表示不透明;

2)android:toAlpha----float型別,表示透明度alpha的結束值。

<scale>標籤

1)android:fromXScale---float型別,水平方向縮放起始值,1表示不做縮放;

2)android:toXScale----float型別,水平方向縮放結束值;

3)android:fromYScale----float型別,豎直方向縮放結束值;

4)android:toYScale----float型別,豎直方向縮放結束值;

5)android:pivotX----float型別,縮放的軸點的x座標,預設為view的中心點;

6)android:pivotY----float型別,縮放的軸點y座標,預設為view的中心點;

<translate>標籤

1)android:fromXDelta----float或百分比,x方向的起始偏移量。如果是float型別,則偏移量以pixel為單位,是一個絕對值。如果是百分比(如10%),表示相對於elementwidth,如10%表示偏移量為width10%,取值範圍-100%--100%。如果是10%p,表示偏移量為parent父視窗的width10%

2)android:toXDelta----float或百分比,x方向的結束偏移量,取值與fromXDelta類似;

3)android:fromYDelta----float或百分比,y方向的起始偏移量,取值與fromXDelta類似,但是百分比是相對於height

4)android:toYDelta----float或百分比,y方向的結束偏移量,取值與fromYDelta類似;

<rotate>標籤

1)android:fromDegrees----float,旋轉的起始角度,單位是degree

2)android:toDegrees----float,旋轉的結束角度,單位是degree

3)android:pivotX----float或百分比,旋轉的中心的x座標。如果是float型別,相對於Object的左邊界的距離,以pixel為單位,如5表示距離左邊界5個畫素的位置。如果是百分比,如10%表示位置相對於Objectwidth10%10%p表示Objectparentwidth10%

4)android:pivotY----float或百分比,旋轉的中心的y座標。取值與pivotX類似,50%表示中心位置。

下面給出一個例子:

res目錄下新建一個資料夾anim,然後新建一個xml,檔名為tween_anim.xml,內容如下:

  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <setxmlns:android="http://schemas.android.com/apk/res/android"
  3.     android:shareInterpolator="false"
  4.     android:fillAfter="true">
  5.     <alpha
  6.         android:duration="700"
  7.         android:fromAlpha="0.2"
  8.         android:toAlpha="1"
  9.         android:interpolator="@android:anim/accelerate_decelerate_interpolator"
  10.         />
  11.     <setandroid:interpolator="@android:anim/decelerate_interpolator">
  12.         <scale
  13.             android:duration="4000"
  14.             android:fromXScale="1.4"
  15.             android:fromYScale="0.6"
  16.             android:pivotX="50%"
  17.             android:pivotY="50%"
  18.             android:toXScale="2"
  19.             android:toYScale="2"/>
  20.         <rotate
  21.             android:duration="4000"
  22.             android:fromDegrees="0"
  23.             android:pivotX="50%"
  24.             android:pivotY="50%"
  25.             android:toDegrees="-45"/>
  26.         <translate
  27.             android:fromXDelta="0"
  28.             android:toXDelta="200"
  29.             android:duration="4000"
  30.             android:fromYDelta="0"
  31.             android:toYDelta="200"/>
  32.     </set>
  33. </set>

這樣就完成了一個檢視動畫的定義,然後在MainActivity中使用這個動畫:

mTextView = (TextView)findViewById(R.id.textView1);

mAnimation = AnimationUtils.loadAnimation(this, R.anim.tween_anim);

mTextView.startAnimation(mAnimation);

效果如下:

 

相關推薦

Android動畫框架()----檢視動畫&動畫

Android提供三種形式動畫:檢視動畫,幀動畫,屬性動畫。其中屬性動畫的功能最強大,在android 3.0中開始引入。本文介紹檢視動畫和幀動畫的使用技巧。 1 檢視動畫(View Animation) Android的檢視動畫可以完成一系列的補間動

Android動畫框架檢視動畫基本使用

      之前在學習View 滑動的時候其實就是View動畫的一種展現形式了,當時介紹了有7中方法可以實現View的滑動,截止目前還有Sroller,動畫以及ViewDragHelper實現沒有介紹,今天的內容裡面就包含了部分View的滑動實現,這裡說部分主要有兩個原

Android動畫解析()-----逐動畫和補間動畫

今天專案又用到了動畫,發現之前掌握的那些又遺忘了不少,趁著有時間,再重新捋順一邊。 Android中的動畫分為 逐幀動畫,補間動畫,屬性動畫 三種. 逐幀動畫(Frame Animation) 逐幀動畫:就像GIF圖片一樣,通過一系列的Drawab

Android 用Animation-list實現逐動畫

第一步:先上圖片素材,以下素材放到res/drawable目錄下: 圖片素材: 檔名稱: icon1.png icon2.png icon3.png icon4.png icon5.png icon6.p

android動畫 通過AnimationDrawable控制逐動畫

效果圖: 當我們點選按鈕時,該圖片會不停的旋轉,當再次點選按鈕時,會停止在當前的狀態。 activity程式碼: [java] view plain copy print?package cn.com.chenzheng_java.animation;  import android.app.Acti

Android開發(25)--framebyframe動畫並實現啟動介面到主介面的跳轉

      Drawable animation可以載入Drawable資源實現幀動畫。AnimationDrawable是實現Drawable animations的基本類。推薦用XML檔案的方法實現Drawable動畫,不推薦在程式碼中實現。這種XML檔案存放在工程中r

Android 用surfaceview模擬動畫的效果,解決動畫的OOM問題

最近做的專案,客戶臨時要求改版,我真的是最煩這個,要求跟換主頁面的背景,換上新的背景圖,要求是動態的。 效果(我隨便拿的五個圖片做的gif): 方案: 幀動畫方案:         缺點:1.好像只能imageview才能播放幀動畫                  2

[Xcode10 實際操作]六、媒體與動畫-(13)使用UIImageView製作動畫

本文將演示如何將匯入的序列圖片,轉換為幀動畫。 在專案導航區開啟資原始檔夾【Assets.xcassets】 【+】->【Import】->選擇圖片->【Open】 在專案導航區,開啟檢視控制器的程式碼檔案【ViewController.swift】 1 import UIK

核心動畫(三)-關鍵動畫

一、簡單介紹 CAKeyframeAnimation是CApropertyAnimation的子類,跟CABasicAnimation的區別是:CABasicAnimation只能從一個數值(fromValue)變到另一個數值(toValue),而CAKeyf

Unity動畫、建立普通動畫

1、選中GameObject,點選Window—Animator—Create,雙擊動畫狀態機控制器便可開啟Animator,下方視訊播放楊圖示檔案為動畫。新建AnimatorControllers資料夾,將動畫狀態機控制器放入    動畫狀態機控制器存放著所有動畫,Game

《Flutter 動畫系列》25種動畫元件超全總結

![](https://img2020.cnblogs.com/other/467322/202004/467322-20200402195444122-1705787188.png) ## 動畫執行的原理 任何程式的動畫原理都是一樣的,即:視覺暫留,視覺暫留又叫視覺暫停,人眼在觀察景物時,光訊號傳入大腦

Android xUtils框架() DbUtils

todo etc finder put build findall integer run get 在DbUtils中,只支持4中數據類型: public enum ColumnDbType { INTEGER("INTEGER"), REAL("REA

Android開源框架():AndroidAnnotations

AndroidAnnotations是一個能夠讓你快速進行Android開發的開源框架,它能讓你專注於真正重要的地方。使程式碼更加精簡,使專案更加容易維護,它的目標就是“Fast Android Development.Easy maintainance”。 通過一段時間的

Android資料庫框架、GreenDao

簡述:greenDAO 是一個將物件對映到 SQLite 資料庫中的輕量且快速的 ORM 解決方案。 其優點還包括以下幾點: 1.存取速度快;  2.支援資料庫加密;  3.輕量級;  4.啟用實體;  5.支援快取;  6.程式碼自動生成; 7.greenDAO 支援 pr

Android開發——動畫使用篇章(動畫,補間動畫)(

Android 動畫分為 view動畫,幀動畫,屬性動畫,本片文章是參考多篇動畫介紹部落格,總結動畫使用API,使用場景。適合日常開發 搬磚使用。 幀動畫 幀動畫是最容易實現的一種動畫,這種動畫更多的依賴於完善的UI資源,他的原理就是將一張張單獨的圖片連貫的進行播放,從而在視覺上

Android動畫)-檢視動畫

概述 Android開發中一直會遇到各種動畫效果,特別是如果老闆和UI妹子很扣這塊的話。這也是每一個Android程式設計師無法繞過的一塊內容,目前專案不忙,終於有時間來系統的整理下Android中的動畫。 Android中動畫分為: 幀動畫(Frame Anim),像幻

Android三種動畫之()動畫

幀動畫介紹:就是將原有的照片一幀一幀的排列好按照一定的順序播放而達到動畫的效果 技術實現:實現的方式有兩種,一種是在資原始檔中新增圖片,一種是直接在程式碼中新增圖片 第一種:在資原始檔中新增圖片 1.在drawable裡面新建檔案frame_animation.xml&nb

Android 動畫動畫、補間動畫

1.Frame Animation(幀動畫) 幀動畫就是把多張圖片在定義的短時間內完成順序播放,最終呈現在視覺上的動態效果;幀動畫首先得具有圖片資源。 下面是幀動畫在Android開發中的具體實現: (1)activity_main.xml檔案: <

Android 屬性動畫框架 ObjectAnimator、ValueAnimator ,這篇就夠了

前言 我們都知道 Android 自帶了 Roate Scale Translate Alpha 多種框架動畫,我們可以通過她們實現豐富的動畫效果,但是這些寬家動畫卻有一個致命的弱點,它們只是改變了 View 顯示的大小,而沒有改變 View 的響應區域。這時以 ObjectAnimator、ValueAni

Android 學習之逐動畫(Frame)

http sta ram override start pub fill creat 代碼 幀動畫就是將一些列圖片。依次播放。利用肉眼的“視覺暫留”的原理,給用戶的感覺是動畫的錯覺,逐幀動畫的原理和早期的電影原理是一樣的。 a:須要定義逐幀動畫,能夠通過代碼定義。也能夠