Android自定义View之闪动的TextView
利用LinearGradient实现TextView的色值的渐变渲染。
LinearGradient简介
LinearGradient mLinearGradient = new LinearGradient(0,0,mViewWidth,0,new int[]{Color.BLUE,0xffffffff,Color.BLUE},new float[]{0.0f,0.5f,1.0f}, Shader.TileMode.CLAMP);
创建LinearGradient并设置渐变颜色数组
第一个,第二个参数表示渐变起点 可以设置起点终点在对角等任意位置
第三个,第四个参数表示渐变终点
第五个参数表示渐变颜色
第六个参数可以为空,表示坐标,值为0-1 new float[] {0.25f, 0.5f, 0.75f, 1 } 如果这是空的,颜色均匀分布,沿梯度线。
第七个表示平铺方式
CLAMP重复最后一个颜色至最后
MIRROR重复着色的图像水平或垂直方向已镜像方式填充会有翻转效果
REPEAT重复着色的图像水平或垂直方向
实现渐变TextView效果
新建FlashBackGroundTextView,继承自TextView
并重写onDraw
和onSizeChanged
方法,声明变量如下:
private Paint mPaint;
private LinearGradient mLinearGradient = null;
private int mViewWidth;
private Matrix mGradientMatrix = null;
private int mTranslateSpeed;
private boolean mAnimating = true;
修改onSizeChanged
方法如下:
@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},new float[]{0.0f,0.5f,1.0f}, Shader.TileMode.CLAMP);
mPaint.setShader(mLinearGradient);
mGradientMatrix = new Matrix();
}
}
}
这里我们通过getPaint
方法取得当前绘制TextView的Paint对象并为其设置了渐变渲染器(setShader
)。
修改onDraw
方法如下:
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (mAnimating && mGradientMatrix != null){
mTranslateSpeed += mViewWidth/10;
if(mTranslateSpeed > 2*mViewWidth){
mTranslateSpeed = 0;
}
mGradientMatrix.setTranslate(mTranslateSpeed,0);
mLinearGradient.setLocalMatrix(mGradientMatrix);
postInvalidateDelayed(100);
}
}
至此,我们就完成了一个闪动的TextView,效果图如下:
LinearGradient 第六个参数为new float[]{0.0f,0.5f,1.0f}的效果:
LinearGradient 第六个参数为null的效果: