利用LinearGradient Shader和Matrix来实现动态文字闪动效果

来源:互联网 发布:php utf8 编码 编辑:程序博客网 时间:2024/06/03 03:52

利用LinearGradient Shader和Matrix来实现动态文字闪动效果。要想实现这一个效果,可以充分利用android中Paint对象的Shader渲染器。通过设置一个不断变化的LinearGradient,并 使用带有该属性的Paint对象来绘制要显示的文字。首先,在onSizeChanged()方法中进行一些对象的初始化工作,并根据View的宽度设置一个LinearGradient渐变渲染器。

代码如下:

package com.csii.btt.chapter3;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;/** * Created by bitaotao on 2016/11/18. */public class MyTextView2 extends TextView {    private int mViewWidth = 0;    private Paint mPaint;    private LinearGradient mLinearGradient;    private Matrix mGradientMatrix;    private int mTranslate = 0;    public MyTextView2(Context context) {        this(context,null,0);    }    public MyTextView2(Context context, AttributeSet attrs) {        this(context,attrs,0);    }    public MyTextView2(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.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);        }    }}

其中最关键的就是使用getPaint()方法获取当前绘制TextView的Paint对象,并给这个Paint对象设置原生TextView

没有的LinearGradient属性。最后,在onDraw()方法中,通过矩阵的方式来不断平移渐变效果,从而在绘制文字时,

产生动态的闪动效果。


0 0
原创粉丝点击