Android 開發藝術探索筆記(16)

2021-08-21 16:45:59 字數 2180 閱讀 1009

插值器和估值器

timeinterpolator中文翻譯為時間插值器,它的作用是根據時間流逝的百分比來計算出當前屬性改變的百分比。系統預置了一些插值器(線性插值器,加減速插值器等)。

typeevaluator的中文翻譯為型別估值演算法,也叫估值器,它的作用是根據當前屬性改變的百分比來計算改變後的屬性值。系統也預置了一些估值器。

插值器和估值器的作用是讓動畫進行非勻速運動。

這是一組動畫從0到40ms完成的乙個勻速動畫,這時候我們要去修改這個動畫變成非勻速動畫。

動畫的預設重新整理率是10ms/幀,所以動畫有5幀,以第三幀 x=20來說,時間流逝的百分比是50%(20/40=0.5),意味時間過了一半。那x應該改變多少呢?這個就要有插值器和估值器來進行確定。一般情況下的插值器是線性插值器,當時間流逝一半時,x的改變也是一半,所以是0.5,所以線性插值器實現的是勻速動畫。

這裡是線性插值器(linearinterpolator)的原始碼,可以看到getinterpolation中返回的值和輸入的值一樣,當返回值是0.5,說明輸入值也是0.5。而x具體變成具體什麼值,就要看估值器。

evaluate方法中的三個引數為估值小數,乙個為起始值,乙個為結束值。對應t=20ms的例子來說就是evaluate(0.5,20,40),返回得值為20,所以x=20,這就是由來。

由**又知道,我們可以通過去實現介面interpolator和typeevaluator來自定義插值器和估值器。

屬性動畫***對任意屬性做動畫屬性動畫的工作原理

這裡就不貼原始碼了,其實很簡單,就是判斷先將當前動畫、等待動畫、延遲動畫中有和當前動畫相同的動畫,則將其取消,最後將當前動畫start。

使用動畫的注意事項

window是乙個視窗,window的具體實現位於windowmanagerservice中,windowmanager可以管理window,並以ipc的形式與windowmanagerservice互動。

首先使用windowmanager來新增乙個window,**如下:

上述的**將乙個button新增螢幕的(100,300)座標上。

windowmanager.layoutparams中的flags和type這兩個引數比較重要。

下面是幾個重要的flags:

type引數表示的是window的型別,有三種,分別是應用window,子window和系統window。

應用類window對應著乙個activity,子window不能單獨存在,它需要附屬在父window中,比如常見的dialog就是子window。系統window就是需要宣告許可權才能建立的window,比如toast。

它們都有分層,大的級別在上面,window的範圍是1-99,子window是1000-1999,系統則是2000-2999,可以通過layoutparams的的type設定。

windowmanager的功能比較簡單,就是新增view、更新view、刪除view。這三個方法都定義在介面viewmanager中。而windowmanager繼承了viewmanager。

window的內部機制

每乙個window都對應著乙個view和乙個viewrootimpl,window和view通過viewrootimpl來建立聯絡,因此view實際上是不存在的,它是以view的形式存在。實際中無法直接應用window,要通過windowmanager。

Android 開發藝術探索筆記(14)

android動畫可以分為三種 view動畫,幀動畫和屬性動畫。view動畫 view動畫作用於view,它支援四種動畫效果,分別是平移 縮放 旋轉和透明度。幀動畫也屬於view動畫,但是其表現形式和上面四種變換效果不太一樣。view的四種變換效果對應著animation的四個子類 translat...

Android 開發藝術探索 IPC機制

2.1 2.2.1 android 開啟程序方式只有android proces 特殊方式通過jni native fork乙個程序 android proces remote 私有程序,其他應用和元件不能和他跑乙個程序 android proces com.test 全域性程序,具有相同share...

Android開發藝術探索 第4章

view工作流程分為 measure layout draw measure又分為view和viewgroup 其中vewgroup又可以分為decorview 頂級view 和普通的viewgroup measure的決定因素 measurespec,測量說明書,32位的數值,前兩位指定specm...