Android闪闪发光字体效果

原文:

http://blog.csdn.net/xu_fu/article/details/24484019

import android.content.Context;
import android.graphics.Canvas;
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 ShineTextView extends TextView {

    private LinearGradient mLinearGradient;  
    private Matrix mGradientMatrix;  
    private Paint mPaint;  
    private int mViewWidth = 0;  
    private int mTranslate = 0;  
  
    private boolean mAnimating = true;  
  
    public ShineTextView(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();  
                // 创建LinearGradient对象
                // 起始点坐标(-mViewWidth, 0) 终点坐标(0,0)
                // 第一个,第二个参数表示渐变起点 可以设置起点终点在对角等任意位置  
                // 第三个,第四个参数表示渐变终点  
                // 第五个参数表示渐变颜色  
                // 第六个参数可以为空,表示坐标,值为0-1,如果这是空的,颜色均匀分布,沿梯度线。  
                // 第七个表示平铺方式  
                // CLAMP重复最后一个颜色至最后  
                // MIRROR重复着色的图像水平或垂直方向已镜像方式填充会有翻转效果  
                // REPEAT重复着色的图像水平或垂直方向  
                mLinearGradient = new LinearGradient(
                        -mViewWidth, 0, 
                        0, 0,  
                        new int[] { 0xFF0288DA, 0xFFFFFFFF, 0xFF0288DA },
                        new float[] { 0, 0.5f, 1 }, 
                        Shader.TileMode.CLAMP);  
                mPaint.setShader(mLinearGradient);  
                mGradientMatrix = new Matrix();  
            }  
        }  
    }  
  
    @Override  
    protected void onDraw(Canvas canvas) {  
        super.onDraw(canvas);  
        if (mAnimating && mGradientMatrix != null) {  
            mTranslate += mViewWidth / 10;  
            if (mTranslate > 2 * mViewWidth) {  
                mTranslate = -mViewWidth;  
            }  
            mGradientMatrix.setTranslate(mTranslate, 0);  
            mLinearGradient.setLocalMatrix(mGradientMatrix);  
            postInvalidateDelayed(50);  
        }  
    }  

}
原文地址:https://www.cnblogs.com/H-BolinBlog/p/6181552.html