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

Android群英传学习笔记-->第三章2

2016-11-16 21:39 309 查看
利用LinearGradient Shader和Matrix来实现一个东塔文字的效果,

实现效果



在onSizeChanged()方法中初始化属性

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) {
//这里是getPaint();而不是new paint();
mPaint = getPaint();
//为View设置一个渐变渲染器
// CLAMP重复最后一个颜色至最后
// MIRROR重复着色的图像水平或垂直方向已镜像方式填充会有翻转效果
// REPEAT重复着色的图像水平或垂直方向
mLinearGradient = new LinearGradient(
0,
0,
mViewWidth,
0,
new int[]{
Color.GRAY, Color.GREEN,
Color.BLACK},
null,
Shader.TileMode.CLAMP);
mPaint.setShader(mLinearGradient);
//初始化矩形
mGradientMatrix = new Matrix();
}
}
}


其中最关键的就是使用getPaint()方法获取当前绘制TextView的Paint对象,并给这个Paint对象设置原生的TextView没有的LinearGradient属性。最后在onDraw方法中,通过矩阵的方式不断平移渐变的效果

2在onDraw(Canvas canvas)中实现画

@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);

if (mGradientMatrix != null) {
//每次变化测量长度的1/5
mTranslate += mViewWidth / 5;
if (mTranslate > 2 * mViewWidth) {
mTranslate = -mViewWidth;
}
//通过矩阵的方式不断平移渐变效果
mGradientMatrix.setTranslate(mTranslate, 0);
mLinearGradient.setLocalMatrix(mGradientMatrix);
//每秒变化一次
postInvalidateDelayed(1000);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android