Android群英传笔记系列之----第三章View的绘制

定义一个类继承至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);
        }
    }
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_42765222/article/details/106365389