一句話概括,平移再畫一次。
textview 預設就支援跑馬燈效果,但需要設定一些東西,滿足一些條件。
但我想知道它的原理。
看這效果,就是平滑移動 textview 的內容,這不就是 mscrollx 幹的嗎,結合 valueanimator 很容易就實現了。
難點在於,把文字的頭部重新從右邊開始畫出來。
width 代表 textview 的實際寬度。
linewidth 代表文字寬度,比如 「abcd」 的寬度。
gap 代表文字頭部和尾部的間隙,預設為 width/3。
mghoststart ,幽靈的起始位置?
當 textview 平移了 mghoststart 後,正好展示完 gap 的最後一畫素。
在下一幀,就需要重新繪製文字頭部了。
canvas.translate(mmaxscroll, 0.0f);
getlayout().draw(canvas, null, null, 0);
mmaxscroll = linewidth + gap
canvas 平移這段距離,就像是重新又從 a 開始繪畫了。
知道原理後,用什麼類實現都可以,改變 gap,改變速度,改變方向,垂直跑馬燈等等。
canvas 真的是爹。
**:
public class mytextview extends textview
public mytextview(context context, attributeset attrs)
public mytextview(context context, attributeset attrs, int defstyleattr)
//@override
protected void ondraw(canvas canvas)
canvas.restore();
}// 跑馬中
boolean running = false;
public boolean isrunning()
// 該畫幽靈部分了
boolean shoulddrawghost()
private float mmaxscroll;
private float mghoststart;
public void start()
}});
animator.start();}}
跑馬燈效果
cgrect frame labelshow.frame frame.origin.x 180 labelshow.frame frame uiview beginanimations testanimation context null uiview setanimationduration 8....
跑馬燈效果
android ellipsize marquee android marqueerepeatlimit marquee forever android singleline true 但是這樣子有乙個缺點,就是這種狀態的跑馬燈只能在textview處於焦點狀態的時候,它才會滾動,對於實際的開發應用...
TextView 跑馬燈效果
本文實現了android系統自帶的跑馬燈效果 marquee 與自定義的跑馬燈效果的對比。1.在系統自帶的跑馬燈中,xml布局檔案必須配置的屬性有以下幾個 1 android clickable true 2 android ellipsize marquee 3 android focusable...