日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

Android画图学习总结(四)——Animation(中)

發(fā)布時(shí)間:2025/5/22 68 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android画图学习总结(四)——Animation(中) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在Android畫圖學(xué)習(xí)總結(jié)(四)——Animation(上)中詳細(xì)介紹了Tween Animation的定義、使用,由于篇幅有限,很多中重要的方面沒有說明,這篇文章一方面做個(gè)完整的總結(jié)說明,另外一方面補(bǔ)充說明上一篇幅遺漏的問題,幫助大家更好的理解Tween Animation。

對(duì)Tween Animation的本質(zhì)做個(gè)總結(jié):Tween Animation通過對(duì) View 的內(nèi)容完成一系列的圖形變換 (包括平移、縮放、旋轉(zhuǎn)、改變透明度)來實(shí)現(xiàn)動(dòng)畫效果。具體來講,預(yù)先定義一組指令,這些指令指定了圖形變換的類型、觸發(fā)時(shí)間、持續(xù)時(shí)間。這些指令可以是以 XML 文件方式定義,也可以是以源代碼方式定義。程序沿著時(shí)間線執(zhí)行這些指令就可以實(shí)現(xiàn)動(dòng)畫效果。

在這里,我們需要對(duì)2個(gè)問題進(jìn)行深入的解析:

  • 動(dòng)畫的運(yùn)行時(shí)如何控制的?
  • 動(dòng)畫的運(yùn)行模式。
動(dòng)畫的運(yùn)行時(shí)如何控制的?

這個(gè)問題,我們也就也就是上一篇幅中提到的Tween Animation,估計(jì)大家對(duì)什么是Interpolator、到底有什么作用,還是一頭霧水,在這里做個(gè)詳細(xì)的說明。按照Android SDK中對(duì)interpolator的說明:interpolator定義一個(gè)動(dòng)畫的變化率(the rate of change)。這使得基本的動(dòng)畫效果(alpha, scale, translate, rotate)得以加速,減速,重復(fù)等。

用通俗的一點(diǎn)的話理解就是:動(dòng)畫的進(jìn)度使用 Interpolator 控制。Interpolator 定義了動(dòng)畫的變化速度,可以實(shí)現(xiàn)勻速、正加速、負(fù)加速、無規(guī)則變加速等。Interpolator 是基類,封裝了所有 Interpolator 的共同方法,它只有一個(gè)方法,即 getInterpolation (float input),該方法 maps a point on the timeline to a multiplier to be applied to the transformations of an animation。Android 提供了幾個(gè) Interpolator 子類,實(shí)現(xiàn)了不同的速度曲線,如下:

AccelerateDecelerateInterpolator在動(dòng)畫開始與介紹的地方速率改變比較慢,在中間的時(shí)候加速
AccelerateInterpolator在動(dòng)畫開始的地方速率改變比較慢,然后開始加速
CycleInterpolator動(dòng)畫循環(huán)播放特定的次數(shù),速率改變沿著正弦曲線
DecelerateInterpolator在動(dòng)畫開始的地方速率改變比較慢,然后開始減速
LinearInterpolator在動(dòng)畫的以均勻的速率改變

對(duì)于 LinearInterpolator ,變化率是個(gè)常數(shù),即 f (x) = x.
public float getInterpolation(float input) {
return input;
}
Interpolator其他的幾個(gè)子類,也都是按照特定的算法,實(shí)現(xiàn)了對(duì)變化率。還可以定義自己的 Interpolator 子類,實(shí)現(xiàn)拋物線、自由落體等物理效果。

動(dòng)畫的運(yùn)行模式

動(dòng)畫的運(yùn)行模式有兩種:

  • 獨(dú)占模式,即程序主線程進(jìn)入一個(gè)循環(huán),根據(jù)動(dòng)畫指令不斷刷新屏幕,直到動(dòng)畫結(jié)束;
  • 中斷模式,即有單獨(dú)一個(gè)線程對(duì)時(shí)間計(jì)數(shù),每隔一定的時(shí)間向主線程發(fā)通知,主線程接到通知后更新屏幕;
額外補(bǔ)充說明:Transformation 類

Transformation 記錄了仿射矩陣 Matrix,動(dòng)畫每觸發(fā)一次,會(huì)對(duì)原來的矩陣做一次運(yùn)算, View 的 Bitmap 與這個(gè)矩陣相乘就可實(shí)現(xiàn)相應(yīng)的操作(旋轉(zhuǎn)、平移、縮放等)。Transformation 類封裝了矩陣和 alpha 值,它有兩個(gè)重要的成員,一是 mMatrix,二是 mAlpha。Transformation 類圖如下所示:

總結(jié)說明

圖形變換通過仿射矩陣實(shí)現(xiàn)。圖形變換是圖形學(xué)中的基本知識(shí),簡(jiǎn)單來說就是,每種變換都是一次矩陣運(yùn)算。在 Android 中,Canvas 類中包含當(dāng)前矩陣,當(dāng)調(diào)用 Canvas.drawBitmap (bmp, x, y, Paint) 繪制時(shí),Android 會(huì)先把 bmp 做一次矩陣運(yùn)算,然后將運(yùn)算的結(jié)果顯示在 Canvas 上。這樣,編程人員只需不斷修改 Canvas 的矩陣并刷新屏幕,View 里的對(duì)象就會(huì)不停的做圖形變換,動(dòng)畫就形成了。

轉(zhuǎn)自http://www.moandroid.com/

轉(zhuǎn)載于:https://blog.51cto.com/zensheno/498497

總結(jié)

以上是生活随笔為你收集整理的Android画图学习总结(四)——Animation(中)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。