您的位置:首页 > 移动开发 > Android开发

Android自定义View之闪动的TextView

2016-04-12 15:43 399 查看

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的效果:



完整代码下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: