思路:
1. 创建一个自定义的View类,继承自View,重写onDraw()方法。
2. 在onDraw()方法中,绘制文字(可以使用Canvas.drawText()方法),让文字横向移动,实现走马灯的效果。
3. 为了实现文字的横向移动,可以设置一个x坐标的变量,每次绘制完文字之后,x坐标变量减一,重复调用onDraw()方法,实现文字横向移动的效果。
4. 如果x坐标变量小于文字的宽度,则将x坐标变量重置为自定义View的宽度,实现循环滚动的效果。
代码实现:
public class MarqueeTextView extends View {
private String text; // 要显示的文字
private Paint mPaint; // 画笔
private int textWidth; // 文字宽度
private int x; // 文字的横坐标
public MarqueeTextView(Context context) {
super(context);
init();
}
public MarqueeTextView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public MarqueeTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
text = "Android自定义View简单实现文字走马灯效果";
mPaint = new Paint();
mPaint.setTextSize(50);
mPaint.setColor(Color.RED);
mPaint.setAntiAlias(true);
textWidth = (int) mPaint.measureText(text);
x = getMeasuredWidth();
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawText(text, x, 50, mPaint);
x--;
if (x < -textWidth) {
x = getMeasuredWidth();
}
postInvalidateDelayed(50);
}
}