之前看到android开启的时候的那个炫动的字感觉很不错,于是自己就做了一个。
其实也非常的简单,就不多说了,直接上代码了
public class ShanDongText extends TextView {
/**
* 画笔
*/
private Paint mPaint;
/**
* 线性的渐变
*/
private LinearGradient linearGradient;
/**
* 矩阵
*/
private Matrix matrix;
/**
* 平移位置
*/
private int translate;
public ShanDongText(Context context) {
this(context, null);
}
public ShanDongText(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public ShanDongText(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
//因为这个控件是继承自TextView,所以可以通过getPaint()来得到它本身的画笔
mPaint = getPaint();
mPaint.setAntiAlias(true);
//初始化线性渲染器
linearGradient = new LinearGradient(0, 0, getMeasuredWidth(), 0, new int[]{Color.BLUE, 0xffffffff, Color.BLUE}, null, Shader.TileMode.CLAMP);
//为画笔设置渲染器
mPaint.setShader(linearGradient);
matrix = new Matrix();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (matrix!=null){
//每次增加五分之一的宽度
translate += getMeasuredWidth()/5;
if (translate>2*getMeasuredWidth()){
translate = -getMeasuredWidth();
}
//将矩阵设置上平移
matrix.setTranslate(translate,0);
//将不断位移的矩阵设置给渲染器,让他改变位置绘制
linearGradient.setLocalMatrix(matrix);
//每隔100毫秒改变一次
postInvalidateDelayed(100);
}
}
}