自定义控件之——文字闪动

来源:互联网 发布:js将数据存入二维数组 编辑:程序博客网 时间:2024/06/05 22:53
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;//1、继承TextViewpublic class ShineTextView extends TextView {    private LinearGradient mLinearGradient;    private Matrix mGradientMatrix;    private Paint mPaint;    private int mViewWidth = 0;    private int mTranslate = 0;    public ShineTextView(Context context, AttributeSet attrs) {        super(context, attrs);    }//2、覆写onSizeChanged()方法,这个方法会在这个view的大小发生改变是被系统调用,w,h是view当前的宽和高;oldw ,oldh是改变之前的宽和高    @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();        // 创建LinearGradient并设置渐变颜色数组          // 第一个,第二个参数表示渐变起点 可以设置起点终点在对角等任意位置          // 第三个,第四个参数表示渐变终点          // 第五个参数表示渐变颜色          // 第六个参数可以为空,表示坐标,值为0-1 new float[] {0.25f, 0.5f, 0.75f, 1 }          // 如果这是空的,颜色均匀分布,沿梯度线。          // 第七个表示平铺方式          // CLAMP重复最后一个颜色至最后          // MIRROR重复着色的图像水平或垂直方向已镜像方式填充会有翻转效果          // REPEAT重复着色的图像水平或垂直方向                  mLinearGradient = new LinearGradient(                        0,                        0,                        mViewWidth,                        0,                        new int[]{                                Color.BLUE, 0xffffffff,                                Color.BLUE},                        null,                        Shader.TileMode.CLAMP);                mPaint.setShader(mLinearGradient);                mGradientMatrix = new Matrix();            }        }    }//3、调用onDraw()方法,来绘制view的内容,super.onDraw()是系统自带的绘制view内容,可以在super.onDraw()方法之前和之后加一些自己想添加的动画或背景。    @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);        }    }}

这里写图片描述

0 0
原创粉丝点击