1.TextView跑马灯效果
单行
文字够长超过屏幕宽度
ellipsize="marqueen"
marqueenRepeatLimit="marqueen_forever"
聚焦:focusable="true"
focusableInTouchMode="true"
2.自定义控件
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
import android.support.v7.widget.AppCompatTextView;
import android.util.AttributeSet;
/**
* Created by Administrator on 2018/12/29
*/
public class MyMarqueenTextView extends AppCompatTextView {
private float x, y;
private float offX = 0f;
private float mStep = 1f;
private Paint mPaint;
public MyMarqueenTextView(Context context) {
super(context);
mPaint = getPaint();
}
public MyMarqueenTextView(Context context, AttributeSet attrs) {
super(context, attrs);
mPaint = getPaint();
}
public MyMarqueenTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
mPaint = getPaint();
}
@Override
protected void onDraw(Canvas canvas) {
//super.onDraw(canvas);
// offX 为横坐标偏移,一开始偏移为0,逐渐增大
String text = this.getText().toString();
Rect rect = new Rect();
mPaint.getTextBounds(text,0,text.length(), rect);
int height = rect.height();
x = getMeasuredWidth() - offX;
// y = getMeasuredHeight() / 2 + (mPaint.descent() - mPaint.ascent()) / 2;
y = getMeasuredHeight() / 2 + height / 2;
canvas.drawText(text, x, y, mPaint);
// 增加横坐标偏移,左移绘制起点 ; mStep为偏移步伐
offX += mStep;
// mRect.width()为包含字符串的最小矩阵的宽度
// 当偏移大于getMeasuredWidth() + mRect.width()时,说字符串尾巴都在View之外,归零偏移量
if (offX >= getMeasuredWidth() + mPaint.measureText(text)) {
offX = 0f;
}
invalidate();
}
}