textview(跑马灯效果)文字长短不限循环播放
textview显示跑马灯效果,使用的是继承的方法onDraw不停地绘制
优点:
1.文字长短不限哦
2.不用非得获取焦点哦
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" > <feng.f7_27.activity.CustomTextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="match_parent" android:background="#aaffee"/> </LinearLayout> </LinearLayout>
package feng.f7_27.activity; import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.os.Parcel; import android.os.Parcelable; import android.util.AttributeSet; import android.view.Display; import android.view.View; import android.view.View.OnClickListener; import android.view.WindowManager; import android.widget.TextView; public class CustomTextView extends TextView implements OnClickListener{ public final static String TAG = CustomTextView.class.getSimpleName(); private float textLength = 0f;//�ı����� private float viewWidth = 0f; private float step = 0f;//���ֵĺ���� private float y = 0f;//���ֵ������ private float temp_view_plus_text_length = 0.0f;//���ڼ������ʱ���� private float temp_view_plus_two_text_length = 0.0f;//���ڼ������ʱ���� public boolean isStarting = false;//�Ƿ�ʼ���� private Paint paint = null;//��ͼ��ʽ private String text = "";//�ı����� public CustomTextView(Context context) { super(context); initView(); } public CustomTextView(Context context, AttributeSet attrs) { super(context, attrs); initView(); } public CustomTextView(Context context, AttributeSet attrs, int defStyle) { super(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.getDefaultDisplay(); viewWidth = display.getWidth(); } } step = textLength; temp_view_plus_text_length = viewWidth + textLength; temp_view_plus_two_text_length = viewWidth + textLength * 2; y = getTextSize() + getPaddingTop()+15; } @Override public Parcelable onSaveInstanceState() { Parcelable superState = super.onSaveInstanceState(); SavedState ss = new SavedState(superState); ss.step = step; ss.isStarting = isStarting; return ss; } @Override public 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); } @Override public void writeToParcel(Parcel out, int flags) { super.writeToParcel(out, flags); out.writeBooleanArray(new boolean[]{isStarting}); out.writeFloat(step); } public static final Parcelable.Creator<SavedState> CREATOR = new Parcelable.Creator<SavedState>() { public SavedState[] newArray(int size) { return new SavedState[size]; } @Override public 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(); } @Override public void onDraw(Canvas canvas) { canvas.drawText(text, temp_view_plus_text_length - step, y, paint); if(!isStarting) { return; } step += 0.5; if(step > temp_view_plus_two_text_length) step = textLength; invalidate(); } @Override public void onClick(View v) { if(isStarting) stopScroll(); else startScroll(); } }
tv.setText("aaaaaavvv");
tv.init(getWindowManager());
tv.startScroll();