总结一下跑马灯的实现效果,网上比较流行的有两种,测试过了都可以实现文字滚动效果,建议使用第一种,因为可以更好地控制文字滚动速度、样式、字体等属性,第二种方法,还没有找到控制的方法!
第一种:
控件类:AutoScrollTextView继承了TextView并做了一些修改,实现了宽度的判断,文本自动滚动及开始和停止滚动等功能。
importandroid.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.WindowManager;
import android.view.View.OnClickListener;
import android.widget.TextView;
public class AutoScrollTextView extends TextView implementsOnClickListener {
public finalstatic String TAG = AutoScrollTextView.class.getSimpleName();
privatefloat textLength = 0f;//文本长度
privatefloat viewWidth = 0f;
privatefloat step = 0f;//文字的横坐标
privatefloat y = 0f;//文字的纵坐标
privatefloat temp_view_plus_text_length = 0.0f;//用于计算的临时变量
privatefloat temp_view_plus_two_text_length = 0.0f;//用于计算的临时变量
publicboolean isStarting = false;//是否开始滚动
privatePaint paint = null;//绘图样式
privateString text = "";//文本内容
publicAutoScrollTextView(Context context) {
super(context);
initView();
}
public AutoScrollTextView(Context context, AttributeSet attrs){
super(context, attrs);
initView();
}
public AutoScrollTextView(Context context, AttributeSet attrs, intdefStyle) {
super(context, attrs, defStyle);
initView();
}
private voidinitView()
{
setOnClickListener(this);
}
public voidinit(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();
}
@Override
publicParcelable onSaveInstanceState()
{
Parcelable superState = super.onSaveInstanceState();
SavedState ss = new SavedState(superState);
ss.step = step;
ss.isStarting = isStarting;