You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android中如何为EditText文本添加渐隐遮罩效果?

给EditText文本添加横向渐变的解决方案

嘿,我看你是想实现EditText文字的横向渐变效果,但之前的代码把渐变用到了新建的Paint上,根本没关联到文本绘制的核心Paint里,所以才会没效果~ 咱们改改代码就能搞定:

public class CustomEditText extends AppCompatEditText {
    public CustomEditText(Context context) {
        super(context);
    }

    public CustomEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public CustomEditText(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        // 获取EditText绘制文本的核心Paint,而不是新建一个没用的Paint
        Paint paint = getPaint();
        // 获取文本绘制的基准线,确保渐变和文本对齐(避免偏移)
        float baseline = getBaseline();

        @ColorInt int startColor = ResourcesCompat.getColor(
                getResources(), android.R.color.transparent, getContext().getTheme());
        @ColorInt int endColor = ResourcesCompat.getColor(
                getResources(), android.R.color.black, getContext().getTheme());

        // 创建横向渐变:对齐文本基准线,从左到右覆盖EditText宽度
        LinearGradient gradient = new LinearGradient(
                0, baseline, getWidth(), baseline,
                startColor, endColor, Shader.TileMode.MIRROR);
        
        // 把渐变设置给文本Paint
        paint.setShader(gradient);

        // 让系统用带渐变的Paint绘制文本
        super.onDraw(canvas);

        // 重置Shader,避免影响后续光标、选中状态等绘制
        paint.setShader(null);
    }
}

关键修改点说明:

  • 用对Paint对象:之前你新建的Paint根本没参与文本绘制,改用getPaint()拿到EditText自带的文本绘制Paint,这是解决问题的核心。
  • 对齐渐变位置:通过getBaseline()获取文本基准线,让渐变的垂直位置和文字完全对齐,不会出现渐变和文字错位的情况。
  • 重置Shader:绘制完成后把Paint的Shader置空,防止后续光标、选中文本的绘制被渐变效果干扰。

这样修改后,EditText的文字就会呈现你想要的横向透明到黑色的渐变效果啦~

内容的提问来源于stack exchange,提问作者Uilque Messias

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:48:13