彩色跑马灯TextView

来源:互联网 发布:淘宝上的丰胸仪有用吗 编辑:程序博客网 时间:2024/04/29 05:37

利用android中的LinearGradient,来实现滚动的颜色,其实就是一个矩阵在跑

package com.minami.qtest1;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.LinearGradient;import android.graphics.Matrix;import android.graphics.Paint;import android.graphics.Shader;import android.util.AttributeSet;import android.widget.TextView;public class RainbowTextView extends TextView {    private int mViewWidth=0;    private float mTranslate = 0;    private Paint mPaint;    private LinearGradient mLinearGradient;    private Matrix mMatrix;    public RainbowTextView(Context context) {        super(context);    }    public RainbowTextView(Context context, AttributeSet attrs) {        super(context, attrs);    }    public RainbowTextView(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);        //初始化渲染器        if (mViewWidth == 0) {            mViewWidth = getMeasuredWidth();            if (mViewWidth > 0) {                mPaint = getPaint();                mLinearGradient = new LinearGradient(0, 0, mViewWidth, 0, new int[]{Color.RED, Color.GREEN, Color.YELLOW},                        null, Shader.TileMode.MIRROR);                mPaint.setShader(mLinearGradient);                mMatrix = new Matrix();            }        }    }    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        if (mMatrix != null) {            mTranslate += mViewWidth / 5;            if (mTranslate>2*mViewWidth){                mTranslate=-mViewWidth;            }            mMatrix.setTranslate(mTranslate,0);            mLinearGradient.setLocalMatrix(mMatrix);            postInvalidateDelayed(100);        }    }}
0 0