要实现闪动的效果充分利用Android 中Paint对象的Shader渲染器
初始化一些使用的全局变量
/**
* 画笔
*/
private Paint mPaint;
/**
* 获取宽
*/
private int mViewWidth;
/**
* 线性渲染
*/
private LinearGradient mLinearGradient;
/**
* 平移距离
*/
private int mTranslate;
/**
* 矩阵
*/
private Matrix mGradientMtrix;
首先要使用onSizeChanged()这个方法进行一些初始化
/**
* 当组件大小改变时
* @param w
* @param h
* @param oldw
* @param 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();
/**
* 第一个,第二个参数表示渐变起点 可以设置起点终点在对角等任意位置
第三个,第四个参数表示渐变终点
第五个参数表示渐变颜色
第六个参数可以为空,表示坐标,值为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,0xffffff,Color.BLUE},null, Shader.TileMode.CLAMP);
mPaint.setShader(mLinearGradient);
mGradientMtrix=new Matrix();
}
}
}
其中最关键的是使用getPaint()方法获取当前绘制TextView的Paint对象,并给这个Paint对象设置原生的TextView没有的LinearGradient属性。最后,在onDraw()方法中,通过矩阵的方式来不断平移渐变效果,从而在绘制文字时,产生动态的闪动效果
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (mGradientMtrix!=null){
mTranslate+=mViewWidth/5;
if (mTranslate > mViewWidth) {
mTranslate=-mViewWidth;
}
mGradientMtrix.setTranslate(mTranslate,0);
mLinearGradient.setLocalMatrix(mGradientMtrix);
postInvalidateDelayed(100);
}
}