定义一个类继承至TextView,并添加其构造函数:要注意的一点就是,添加构 造函数时,一定要添加到含有Attributset参数的的构造函数,否则程序会报错,因为Attributset参数的作用是:外部通过它来获取到自定义view的属性。
public class Mytextview extends android.support.v7.widget.AppCompatTextView {
public Mytextview(Context context) {
super(context);
}
//Attributset参数的作用是:外部通过它来获取到自定义view的属性。
public Mytextview(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
Paint mPaint1;
Paint mPaint2;
@Override
protected void onDraw(Canvas canvas) {
mPaint1 = new Paint();
mPaint1.setColor(getResources().getColor(android.R.color.holo_blue_light));
mPaint1.setStyle(Paint.Style.FILL);
mPaint2 = new Paint();
mPaint2.setColor(Color.YELLOW);
mPaint2.setStyle(Paint.Style.FILL);
//外层矩形
canvas.drawRect(0,0,getMeasuredWidth(),getMeasuredHeight(),mPaint1);
canvas.drawRect(10,10,getMeasuredWidth()-10,getMeasuredHeight()-10,mPaint2);
canvas.save();
//绘制内层矩形
canvas.translate(10,0);
super.onDraw(canvas);
canvas.restore();
}
}
闪动字体
public class MyShaderTextView extends android.support.v7.widget.AppCompatTextView {
private TextPaint mPainy;
private LinearGradient mLinearGradient;
private Matrix mGradientMatrix;
private int mTranslate=0;
public MyShaderTextView(Context context) {
super(context);
}
public MyShaderTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
int mViewWidth=0;
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
if (mViewWidth == 0){
mViewWidth = getMeasuredWidth();
if (mViewWidth > 0 ){
mPainy = getPaint();
mLinearGradient = new LinearGradient(0,0,mViewWidth,0,new int[]{Color.BLUE,0xffffffff,
Color.BLUE},null, Shader.TileMode.CLAMP);
mPainy.setShader(mLinearGradient);
mGradientMatrix = new Matrix();
}
}
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (mGradientMatrix != null){
mTranslate += mViewWidth/5;
if (mTranslate > 2 * mViewWidth){
mTranslate =- mViewWidth;
}
mGradientMatrix.setTranslate(mTranslate,0);
mLinearGradient.setLocalMatrix(mGradientMatrix);
postInvalidateDelayed(100);
}
}
}