編輯:關於Android編程
屬性動畫系統是一個健壯的框架,它幾乎可以允許把任何對象變成動畫。可以根據時間的推移來改變任何對象的屬性來定義一個動畫,而不用關心該對象是否要繪制在屏幕上。屬性動畫是在指定的時間長度上改變一個屬性(對象中的一個成員字段)的值。要讓某些對象變成動畫,就要給該對象指定想要的動畫屬性,如果對象在屏幕上的位置、動畫的停留時間以及動畫之間的值等。
屬性動畫系統可以定義以下動畫特性:
1. 持續時間(Duration):指定動畫的持續時間。默認長度是300毫秒。
2. 時間插值(Time interpolation):這個值能夠做為計算當前動畫運行時間的函數的屬性值來指定,它決定動畫的變化頻率。
3. 重復次數和行為(Repeat count and behavior)
這個屬性能夠指定在動畫結束時是否重新播放動畫,以及重復播放的次數。還能夠指定動畫是否能夠反向回播,如果設置了反向回播,那麼動畫就會先向前再向後,重復播放,直到達到播放次數。
4. 動畫集合(Animator sets):你能夠把動畫組織到一個邏輯集合中,然後或者同時、或者順序的、或者延遲播放它們。
5. 幀刷新延遲(Frame refresh delay):你能夠指定動畫幀的刷新頻率。默認是每10秒中刷新一次,但是應用程序最終的刷新幀的速度依賴與系統的繁忙程度以及系統能夠提供的底層定時器的反應速度。
屬性動畫是如何工作的
首先,讓我們用一個簡單的例子來看一下動畫的工作方式。圖1繪制了一個假想的動畫對象,它用x屬性來表示其在屏幕上的水平位置。動畫的持續時間被設置為40毫秒,並且移動的距離是40個像素。每10毫秒,是默認的幀刷新頻率,即每10毫秒對象水平移動10個像素。在40毫秒結束時,動畫停止,並且動畫要停留在水平40像素點的位置上。這是一個線性插值的動畫示例,意味著動畫勻速運動。
圖1.線性動畫示例
還可以指定非線性差值的動畫。圖2假設了一個加速開始、減速結束的動畫對象,該對象依然在40毫秒內移動了40個像素,但是非線性的。在開始的時候,這個動畫加速運動到一半的位置,然後開始減速運動直到動畫結束。如圖2所示,對象運行的距離在開始和結束階段要比中間部分短。
圖2.非線性動畫的示例
接下來讓我們更詳細的了解屬性動畫系統的重要組件是如何計算上圖所示動畫。圖3繪制了主類和其他類是如何一起工作的。
圖3.動畫的計算方式
ValueAnimator對象保持著動畫的時間軌跡,如動畫的運行時間,以及動畫屬性的當前值。
ValueAnimator類封裝了一個TimeInterpolator類,這個類定義了動畫的差值,和一個TypeEvaluator類,這個類定義動畫屬性值的計算方式。例如,在圖2中TimeInterpolator對象使用AccelerateDecelerateInterpolator定義,TypeEvaluator使用了IntEvaluator定義。
要啟動一個動畫,就要創建一個ValueAnimator對象,並且要給該對象設置想要的動畫的屬性的開始和結束值,以及動畫的持續時間。在調用start()方法開始動畫的時候,整個動畫期間,ValueAnimator對象會根據動畫的持續時間和已經執行的時間,在0和1之間,計算一個elapsed fraction(過去系數)。這個系數代表了動畫已經完成的百分比,0意味著0%、1意味著100%。例如,圖1中,在t = 10毫秒處的過去系數是0.25,因為總的持續時間是t = 40毫秒。
當ValueAnimator對象完成過去系數的計算時,它會調用當前設置的TimeInterpolator對象,來計算一個差值系數(interpolated fraction)。差值系數(interpolated fraction)把過去系數(elapsed fraction)映射到一個新的考慮設置時間差值的系數。例如,在圖2中,因為動畫是慢慢的加速,因此在t=10毫秒時,差值系數大約是0.15,它比過去系數(elapsed fraction)0.25要小。在圖1中,差值系數(interpolated fraction)與過去系數(elapsed fraction)始終相同。
在計算差值系數(interpolated fraction)時,ValueAnimator對象會調用相應的TypeEvaluator對象,基於差值系數、動畫的開始值、結束值,來計算動畫的屬性值。例如,在圖2中,在t = 10毫秒處,差值系數是0.15,因此在此時的屬性值應該是0.15*(40 – 0)= 6。
作者:FireOfStar
我們常常聽說電腦重裝系統,那麼現在的智能手機可以重裝系統嗎?手機是可以重裝系統的,但是我們通常叫刷機,今天小編就為大家分享一下如何使用刷價軟件卓大師來進行刷
在sina裡看到了什麼全民奪寶的鏈接,然後忍不住1元的誘惑被坑了10多塊,什麼都沒有抽到,但是還是有人抽到了不知道是不是坑爹的,然後也就動手做一下倒計時的功能。先看全民奪
一、概述距離上一篇博客有段時間沒更新了,主要是最近有些私事導致的,那麼就先來一篇簡單一點的博客脈動回來。對於加載圖片,大家都不陌生,一般為了盡可能避免OOM都
TableLayout就是將手機的屏幕分為一行行的形式進行數據的顯示,並且一行可以多個控件 並且可以設置控件的對齊方式,和是否為可收縮行 下面通過一行圖和一個簡單的例子來