自定義view 實現跑馬燈效果

2021-07-09 14:42:04 字數 1269 閱讀 3112

自定位view的廣泛使用,使得我們程式更多的充滿了可變性,靈活性。這個跑馬燈效果是通過執行緒,給予自定義view一些簡單的動態效果。中間我會簡單的提及到一些小的知識點,比如argb的運用,獲取字串長度等。先建立乙個class  檔案使他繼承view,然後定義一些變數,myviewthread 是待會定義的乙個類繼承與thread

float rx是跑馬燈文字的x座標,他的移動距離增加也代表跑馬燈的移速。

random rand 是等會會使用的顏色變化值,稍後會詳細介紹

paint paint 是建立的畫筆

public class myview extends view

public myview(context context, attributeset attrs)

public myview(context context)

重寫ondraw方法,先判斷是否有執行緒,沒有的話建立執行緒,當執行緒開始後設定畫筆大小,建立text,引數分別,string,x座標,y座標,畫筆。  

@override

protected void ondraw(canvas canvas) else } 

在while迴圈中,rx代表文字的x座標,他的+=與thread.sleep(30)相承接,執行緒睡眠代表著x軸移動的觸發平率,當前是0.3秒

x周移動3的距離(在xml生成以後系統會直接把dp轉化為px單位,根據個每個160dpi的螢幕,1dp=1pxdip,320dps,1dp=2pxdip)

if (rx>getwidth()) 是當rx大於當前view的布局,我們將獲取「跑馬燈效果」這段字型

的長度作為偏移量加到rx=0的時候,使他像是從來從頭開始的效果。我們又給畫筆設定不斷變化的顏色使他顯示出跑馬燈的效果。

paint.setargb(255, r, g, b);argb中a代表alpha 透明度,r代表red 紅色,g代表green綠色,b代表bule藍色。遵循16進製制原則

0-256。

postinvalidate();是主線程更新ui的方法。

class myviewthread extends thread

int r=rand.nextint(200)+56;

int g=rand.nextint(200)+56;

int b=rand.nextint(200)+56;

paint.setargb(255, r, g, b);

postinvalidate();

try catch (interruptedexception e) }}

}

Flex 「跑馬燈」效果(自定義「跑馬燈」控制項)

自定義類 broadcastmarquee.as package marquee 初始化 private function initbroadcast void 如果有新的廣播訊息,或者長度改變進行滾動顯示 private function scrollbroadtext void 控制滾動資訊 p...

跑馬燈效果

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

跑馬燈效果

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