跑馬燈效果

2021-07-11 01:25:22 字數 1395 閱讀 1371

一句話概括,平移再畫一次。

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...