先看效果:(为了凸显渐变效果不受背景约束,这里layout的背景是黑色文本背景是灰色)
核心代码:
private void initGradient() {
mPaint = new Paint();
mPaint.setColor(Color.BLACK);
mPaint.setTextSize(getTextSize());
// 设置边框虚化效果
mPaint.setMaskFilter(new BlurMaskFilter(10, BlurMaskFilter.Blur.NORMAL));
// 设置渐变背景
int[] colors = {Color.WHITE, Color.WHITE, Color.TRANSPARENT}; //从左到右渐变颜色依次是白色,白色,透明
float[] positions = {0.0f, 0.5f, 1.0f}; //对应上面三个颜色,这里设置的效果是右侧渐变,如果想要双边虚化渐变的话,就把第一个颜色改成透明
Shader shader = new LinearGradient(0, 0, getWidth(), 0, colors, positions, Shader.TileMode.CLAMP);
getPaint().setShader(shader);
}
调用位置:
这个方法我在重写onLayout()时调用:
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
Log.d(TAG, getText() + ": onLayout");
if (getText() != null) {
initGradient();
}
}