Спасибо за ответ Сидона.Это помогло мне.
И я добавил этот ответ, потому что я нашел способ использовать цвета с прозрачностью в градиенте.Поэтому, пожалуйста, сначала обратитесь к ответу Сидона и наберите его.
Я нашел ниже описание метода setShadowLayer из здесь .
Альфа альфатень будет альфа краской, если цвет тени непрозрачный, или альфа из цвета тени, если нет.
Таким образом, point is shadowColor должен быть непрозрачным, чтобы использовать цвета с прозрачностью в градиенте.
Вот код.
@Override
protected void onDraw(Canvas canvas) {
// draw the shadow
getPaint().setShader(null);
setTextColor(0x00ffffff); // set the paint's alpha by 00
getPaint().setShadowLayer(3.0f, 1.5f, 1.8f, shadowColor); // shadowColor must be not opaque
super.onDraw(canvas);
// draw the gradient filled text
getPaint().clearShadowLayer();
setTextColor(0xffffffff); // set the paint's alpha by ff
getPaint().setShader(new LinearGradient(0, 0, getWidth(), getHeight(), 0x7fff8809, 0x7f09ffff, Shader.TileMode.CLAMP)); // or whatever gradient/shader you use
super.onDraw(canvas);
}
Если shadowColor непрозрачный, вы можете изменить его как непрозрачный, уменьшив альфа на единицу.
if((shadowColor >>> 24) == 0xff)
shadowColor &= 0xfeffffff;
Еще раз спасибодля ответа Сидона.
2018-12-16 Редактировать:
Если у вас одинаковое альфа-значение для цветов, код ниже будет лучше.
public class TextView_Gradient extends TextView {
public TextView_Gradient(Context context) {
super(context);
setTextColor(0x3fffffff); // set the paint's alpha by 3f
}
@Override
protected void onDraw(Canvas canvas) {
// draw the shadow
getPaint().setShader(null);
// shadowColor must be opaque.
getPaint().setShadowLayer(3.0f, 1.5f, 1.8f, shadowColor);
super.onDraw(canvas);
// draw the gradient filled text
getPaint().clearShadowLayer();
// gradient colors must be opaque, too.
getPaint().setShader(new LinearGradient(0, 0, getWidth(), getHeight(), 0xffff8809, 0xff09ffff, Shader.TileMode.CLAMP));
super.onDraw(canvas);
}
}
Поскольку альфатени будет альфа-краской, если цвет тени непрозрачный.А альфа цветов градиента - это альфа краски, если альфа цветов градиента ff (непрозрачный).
(или конечная альфа текста может быть снова масштабирована по альфа-значению цвета градиента при условии, чтоальфа краски ff.)
Вывод: