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);  
        }  
    }  

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM