LED跑馬燈效果

2021-07-03 09:02:41 字數 1692 閱讀 9564

這個led跑馬燈的效果是怎麼乙個原理,現分析如下:

假設有乙個要進行變化的物件陣列,我們稱之為a物件。

如下:

這個等變化的陣列長度為5,

有顏色陣列,我們稱之為b,如下:

這個長度為3。

要分析出原理,我們要根據事物的表象去分析得到事物內在的規律與原理,根據這個原理與規律我們才能得出解決辦法。 我們進行一次模擬:

(1)初始狀態

(2)移動過程中的某一狀態

我們可以寫出這樣的乙個過程**,這裡用偽**進行解釋說明:

i是從指定的位置開始向低位變化的

j是從0開始進行遍歷到高位,直至結束

for( i = 發生變化的游標位置, j=0;  i>=0; i--, j++ )

else

}//相應的實現**

//顏色陣列(簡稱b)

var colorarr = [ '#f00', '#09f', '#6f6', '#c33', '#cf0' ];

var liindex = 0; //游標,用於進行變化的下標變數。

for( var i=liindex, j=0; i>=0; i--, j++ )else}

這個過程都很正常,沒有什麼特別需要注意和處理的地方,關鍵是,當游標超出a物件的長度的時候,如何進行乙個處理?

如圖所示狀態:

我們通過增加乙個假想長度,讓b能夠繼續完成它的遍歷,但實際上對b而言,它面對的物件「a」是乙個我們加了乙個長度的假想物件a,目的只是讓b完成它的遍歷,而a物件仍然是不可能發生變化的,i游標的值,最大也是為a物件的長度,但變化游標的值卻是可以移動到假想物件「a」的最後乙個位置上的,所以liindex是可以繼續加大的,而liindex與i的之間的距離,也就是offset偏移量的值,同時也是我們給a物件增加的假想長度。那麼這個過程會持續到哪乙個位置上結束?

對,沒有錯,就是當b完成了在a最後乙個位置上的遍歷時如下:

所以,可以得出,一次全程的過程的終結狀態是在於offset的值=b陣列的長度,而offset是由liindex與i的差進行計算的,所以得到如下公式:

offset = liindex - a.length;

判斷結束狀態為:

if( offset >= b.length )

至此,整個過程已經走完一次。所以,得到這個思路後,寫**就容易多了。

最後的效果如下:

跑馬燈效果

cgrect frame labelshow.frame frame.origin.x 180 labelshow.frame frame uiview beginanimations testanimation context null uiview setanimationduration 8....

跑馬燈效果

一句話概括,平移再畫一次。textview 預設就支援跑馬燈效果,但需要設定一些東西,滿足一些條件。但我想知道它的原理。看這效果,就是平滑移動 textview 的內容,這不就是 mscrollx 幹的嗎,結合 valueanimator 很容易就實現了。難點在於,把文字的頭部重新從右邊開始畫出來。...

跑馬燈效果

android ellipsize marquee android marqueerepeatlimit marquee forever android singleline true 但是這樣子有乙個缺點,就是這種狀態的跑馬燈只能在textview處於焦點狀態的時候,它才會滾動,對於實際的開發應用...