软件编程
位置:首页>> 软件编程>> Android编程>> Android基于TextView实现的跑马灯效果实例

Android基于TextView实现的跑马灯效果实例

作者:炫_愛羊  发布时间:2023-10-07 02:45:05 

标签:Android,TextView,跑马灯效果

本文实例讲述了Android基于TextView实现的跑马灯效果。分享给大家供大家参考,具体如下:


package sweet.venst.act;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.view.Display;
import android.view.View;
import android.view.WindowManager;
import android.view.View.MeasureSpec;
import android.view.View.OnClickListener;
import android.widget.TextView;
public class AutoScrollTextView extends TextView {
public final static String TAG = AutoScrollTextView.class.getSimpleName();
private float textLength = 0f;// 文本长度
private int viewWidth = 0;
private int viewHight = 300;
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 AutoScrollTextView(Context context)
{
super(context);
}
public AutoScrollTextView(Context context, AttributeSet attrs)
{
super(context, attrs);
}
public AutoScrollTextView(Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs, defStyle);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
// TODO Auto-generated method stub
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int measureWidth = measureWidth(widthMeasureSpec);
int measureHight = measureHeight(heightMeasureSpec);
// int measureWidth = 1024;
// int measureHight = 300;
viewWidth = measureWidth;
viewHight = measureHight;
setMeasuredDimension(viewWidth, viewHight);
}
private int measureWidth(int widthMeasureSpec)
{
int specMode = MeasureSpec.getMode(widthMeasureSpec);
int specSize = MeasureSpec.getSize(widthMeasureSpec);
if (specMode == MeasureSpec.UNSPECIFIED) {
 return viewWidth;
}
else  {
  return viewWidth;
 }
}
private int measureHeight(int widthMeasureSpec) {
int specMode = MeasureSpec.getMode(widthMeasureSpec);
int specSize = MeasureSpec.getSize(widthMeasureSpec);
if (specMode == MeasureSpec.UNSPECIFIED) {
 return viewHight;
} else {
 return viewHight;
}
}
public void setScrollText(String text)
{
this.text = text;
inittextLength(text);
// invalidate();
}
public void init(Context cx) {
paint = getPaint();
paint.setTextSize(40);
paint.setColor(Color.WHITE);
text = getText().toString();
textLength = paint.measureText(text);
viewWidth = getWidth();
if (viewWidth == 0) {
 DisplayMetrics dm = new DisplayMetrics();
 dm = cx.getApplicationContext().getResources().getDisplayMetrics();
 viewWidth = dm.widthPixels;
}
step = textLength;
temp_view_plus_text_length = viewWidth + textLength;
temp_view_plus_two_text_length = viewWidth + textLength * 2;
y = getTextSize() + getPaddingTop();
}
private void inittextLength(String text) {
textLength = paint.measureText(text);
step = textLength;
temp_view_plus_text_length = viewWidth + textLength;
temp_view_plus_two_text_length = viewWidth + textLength * 2;
}
@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];
 }
 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();
}
public void onDraw(Canvas canvas) {
canvas.save();
canvas.drawText(text, temp_view_plus_text_length - step, y, paint);
if (!isStarting) {
 return;
}
step += 3.2;// 0.5为文字滚动速度。
if (step > temp_view_plus_two_text_length)
 step = textLength;
canvas.restore();
// invalidate();
postInvalidate();
}
}

希望本文所述对大家Android程序设计有所帮助。

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com