Android marquee Effect
Layout file:
Code:
AutoScrollTextView:
Public class AutoScrollTextView extends TextView {public final static String TAG = AutoScrollTextView. class. getSimpleName (); private float textLength = 0f; // text length private float viewWidth = 0f; private float step = 0f; // The horizontal private float y of the text = 0f; // The text ordinate private float temp_view_plus_text_length = 0.0f; // temporary variable used for calculation ?? Private float temp_view_plus_two_text_length = 0.0f; // Temporary change used for calculation ?? Public boolean isStarting = false; // do you want ?? Start rolling ?? Private Paint paint = null; // drawing style private String text =; // text content public AutoScrollTextView (Context context) {super (context); initView ();} public AutoScrollTextView (Context context, AttributeSet attrs) {super (context, attrs); initView ();} public AutoScrollTextView (Context context, AttributeSet attrs, int defStyle) {super (context, Context, attrs, defStyle); initView ();} private void initView () {// setOnClickListener (This);} public void init (WindowManager windowManager) {paint = getPaint (); text = getText (). toString (); textLength = paint. measureText (text); viewWidth = getWidth (); if (viewWidth = 0) {if (windowManager! = Null) {Display display = windowManager. getdefadisplay display (); viewWidth = display. getWidth () ;}} step = textLength; temp_view_plus_text_length = viewWidth + textLength; second = viewWidth + textLength * 2; y = getTextSize () + getPaddingTop ();} @ Overridepublic Parcelable onSaveInstanceState () {Parcelable superState = super. onSaveInstanceState (); SavedState ss = new SavedState (superSt Ate); ss. step = step; ss. isStarting = isStarting; return ss ;}@ Overridepublic void onRestoreInstanceState (Parcelable state) {if (! (State instanceof SavedState) {super. onRestoreInstanceState (state); return;} SavedState ss = (SavedState) state; super. onRestoreInstanceState (ss. getSuperState (); step = ss. step; isStarting = ss. isStarting;} public static class SavedState extends BaseSavedState {public boolean isStarting = false; public float step = 0.0f; SavedState (Parcelable superState) {super (superState );} @ Overridepublic void writeToParcel (Parcel out, int flags) {super. writeToParcel (out, flags); out. writeBooleanArray (new boolean [] {isStarting}); out. writeFloat (step);} public static final Parcelable. creator
CREATOR = new Parcelable. Creator
() {Public SavedState [] newArray (int size) {return new SavedState [size];} @ Overridepublic SavedState createFromParcel (Parcel in) {return new SavedState (in );}}; private SavedState (Parcel in) {super (in); boolean [] B = null; in. readBooleanArray (B); if (B! = Null & B. length> 0) isStarting = B [0]; step = in. readFloat () ;}} public void startScroll () {isStarting = true; invalidate ();} public void stopScroll () {isStarting = false; invalidate ();} @ Overridepublic void onDraw (Canvas canvas) {if (! IsStarting) {return;} canvas. drawText (text, temp_view_plus_text_length-step, y, paint); step + = 2; // text scroll speed ?? If (step> temp_view_plus_two_text_length) step = textLength; invalidate () ;}// @ Override // public void onClick (View v) {// if (isStarting) // stopScroll (); // else // startScroll ();////}}
MainActivity:
Private void getNotice () {// TODO Auto-generated method stubtv_notice.setText (text); TV _notice.init (getWindowManager (); TV _notice.startScroll ();}