前言
对于文本简记录文本颜色渐变,方便自己查阅。
好记性不如烂笔头
正文
要用渐变,需要了解一下LinearGradient的各种参数
简单介绍LinearGradient
LinearGradient的实现有两种。
第一种
public LinearGradient(float x0, float y0, float x1, float y1, int color0, int color1, Shader.TileMode tile)
x0,y0,x1,y1是起始位置和渐变的结束位置,color0,color1是渐变颜色。
最后一个参数表示绘制模式:
Shader.TileMode有3种参数可供选择,分别为CLAMP、REPEAT和MIRROR:
[1] CLAMP的作用是如果渲染器超出原始边界范围,则会复制边缘颜色对超出范围的区域进行着色
[2] REPEAT的作用是在横向和纵向上以平铺的形式重复渲染位图
[3] MIRROR的作用是在横向和纵向上以镜像的方式重复渲染位图
第二种
public LinearGradient (float x0, float y0, float x1, float y1, int[] colors, float[] positions, Shader.TileMode tile);
x0,y0,x1,y1 参数和上面一样,TileMode和上面一样
colors表示渐变的颜色数组;
positions指定颜色数组的相对位置
代码片
下面用了上面两种方式实现,也验证ok。直接上代码,自己看。
TextView textView = findViewById(R.id.shape_tv_one);
/**
* 从上往下渐变
*/
LinearGradient gradient_up_down = new LinearGradient(0f, 0f, 0f, textView.getPaint().descent() - textView.getPaint().ascent(),
new int[]{Color.parseColor("#FFEABF"), Color.parseColor("#DBA06F")},
null, Shader.TileMode.REPEAT);
LinearGradient gradient_up_down2 = new LinearGradient(0f, 0f, 0f, textView.getPaint().getTextSize(),
new int[]{Color.parseColor("#FFEABF"), Color.parseColor("#DBA06F")},
new float[]{0, textView.getText().length()}, Shader.TileMode.CLAMP);
/**
* 从左往右渐变
*/
LinearGradient gradient_left_right = new LinearGradient(0f, 0f, (int) (textView.getPaint().measureText(textView.getText(),
0, textView.getText().length())), 0, new int[]{Color.parseColor("#FFEABF"),
Color.parseColor("#DBA06F")}, null, Shader.TileMode.REPEAT);
LinearGradient gradient_left_right2 = new LinearGradient(0f, 0f, (int) (textView.getPaint().measureText(textView.getText(),
0, textView.getText().length())), 0, new int[]{Color.parseColor("#FFEABF"),
Color.parseColor("#DBA06F")}, new float[]{0, textView.getText().length()}, Shader.TileMode.CLAMP);
textView.getPaint().setShader(gradient_left_right2);
参考文章
本文参考如下文章,感谢。
© 版权声明