TextView 文字加上闪光与外层圆跟内层圆显示文字

来源:互联网 发布:快拍王软件下载 编辑:程序博客网 时间:2024/04/30 14:21

新建一个类集成textView

public class MarcTextViewTwo extends TextView{    int mViewWidth;    Paint mPaint;    LinearGradient mLinearGradient;    Matrix mGradientMatrix;    int mTranslate;    public MarcTextViewTwo(Context context) {        super(context);    }    public MarcTextViewTwo(Context context, AttributeSet attrs) {        super(context, attrs);    }    @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){                mPaint = getPaint();                mLinearGradient = new LinearGradient(0,                        0,                        mViewWidth,                        0,new int[]{                        Color.BLUE,0xffffffff,  //闪光                        Color.BLUE},null, Shader.TileMode.CLAMP                );                mPaint.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);        }    }}

然后是外层圆内从圆显示文字效果

public class MarcView extends View {    private int mMeasureHeight;    private int mMeasureWidth;    private Paint mCirclePaint;//外层圆paint    private float mCircleXY;    private float mRadius;    private Paint mArcPaint;//矩形paint    private RectF mArcRectF;    private float mSweepAngle;//设置圆的扫描    private float mSweepValue = 66; //默认圆的扫描值    private Paint mTextPaint;//文字paint    private String tip;//textview显示文字    private int mSize;//texview 文字大小    public MarcView(Context context) {        super(context);        WindowManager manager = (WindowManager) context                .getSystemService(Context.WINDOW_SERVICE);        Display display = manager.getDefaultDisplay();        int length = display.getWidth();        mCircleXY = length/2;        mRadius = (float) (length*0.5/2);    }    public MarcView(Context context, AttributeSet attrs) {        super(context, attrs);    }    //测量    @Override    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {        super.onMeasure(widthMeasureSpec, heightMeasureSpec);        mMeasureHeight = MeasureSpec.getSize(heightMeasureSpec);        mMeasureWidth = MeasureSpec.getSize(widthMeasureSpec);        setMeasuredDimension(mMeasureWidth,mMeasureHeight);        initView();    }    private void initView() {        float length = 0;        if (mMeasureHeight >= mMeasureWidth) {            length = mMeasureWidth;        } else {            length = mMeasureHeight;        }        mCircleXY = length/2;        mRadius = (float) (length * 0.5 / 2);        mCirclePaint = new Paint();        mCirclePaint.setAntiAlias(true);        mCirclePaint.setColor(getResources().getColor(                android.R.color.holo_blue_bright));        mArcRectF = new RectF((float)(length*0.1),                (float)(length*0.1),                (float)(length*0.9),                (float)(length*0.9)                );        mSweepAngle = (mSweepValue / 100f) * 360f;        mArcPaint = new Paint();        mArcPaint.setAntiAlias(true);        mArcPaint.setColor(getResources().getColor(                android.R.color.holo_green_light));        mArcPaint.setStrokeWidth((float) (length * 0.1));        mArcPaint.setStyle(Paint.Style.STROKE);        mTextPaint = new Paint();        mTextPaint.setTextSize(mSize);        mTextPaint.setTextAlign(Paint.Align.CENTER);    }    public void setShowTextSize(int size) {        if(size > 0){            mSize = size;        }else {            //默认值为50            mSize = 50;        }        this.invalidate();    }    /**     * 设置显示文本内容     * @return     */    public void setShowText(String text) {        if(null!=text){            tip = text;        }else {            tip  = "Marc Test";        }        this.invalidate();    }    public void setSweepValue(float sweepValue) {        if (sweepValue != 0) {            mSweepValue = sweepValue;        } else {            mSweepValue = 25;        }        this.invalidate();    }    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        //绘制圆        canvas.drawCircle(mCircleXY,mCircleXY,mRadius,mCirclePaint);        //绘制弧形        canvas.drawArc(mArcRectF,270,mSweepAngle,false,mArcPaint);        //绘制文本        canvas.drawText(tip,0,tip.length(),mCircleXY,mCircleXY+(mSize/4),mTextPaint);    }}


0 0