美文网首页
输入字体带有描边效果的EditText

输入字体带有描边效果的EditText

作者: cy_why | 来源:发表于2023-03-29 11:05 被阅读0次
  • 实现效果:EditText在输入时,字体带有描边效果。
  • 实现的原理很简单,其实就是在EditText中嵌入一个带描边效果的EditText。(网上很多文章都是TextView,但是实测TextView在输入英文时,两者的换行效果不一致,会出现错位的问题。)
public class StrokeEditText extends AppCompatEditText {

    private EditText outlineTextView;
    private int strokeColor;

    public StrokeEditText(Context context) {
        super(context);
        outlineTextView = new EditText(context);
        init();
    }

    public StrokeEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
        outlineTextView = new EditText(context, attrs);
        init();
    }

    public StrokeEditText(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        outlineTextView = new EditText(context, attrs, defStyle);
        init();
    }

    public void init() {
        outlineTextView.setEnabled(false);
        strokeColor = getContext().getResources().getColor(R.color.white);
        TextPaint paint = outlineTextView.getPaint();
        paint.setStrokeWidth(4f);
        paint.setStyle(Paint.Style.STROKE);
        outlineTextView.setTextColor(strokeColor);
        outlineTextView.setHintTextColor(strokeColor);
        outlineTextView.setGravity(getGravity());
    }

    @Override
    public void setLayoutParams(ViewGroup.LayoutParams params) {
        super.setLayoutParams(params);
        outlineTextView.setLayoutParams(params);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        // 设置轮廓文字
        CharSequence outlineText = outlineTextView.getText();
        if (outlineText == null || !outlineText.equals(this.getText())) {
            outlineTextView.setText(getText());
            postInvalidate();
        }
        outlineTextView.measure(widthMeasureSpec, heightMeasureSpec);

        CharSequence hint = outlineTextView.getHint();

        if (hint == null || !hint.equals(this.getHint())) {
            outlineTextView.setHint(getHint());
            postInvalidate();
        }
        outlineTextView.measure(widthMeasureSpec, heightMeasureSpec);
    }

    @Override
    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
        super.onLayout(changed, left, top, right, bottom);
        outlineTextView.layout(left, top, right, bottom);
    }

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

    @Override
    protected void onScrollChanged(int horiz, int vert, int oldHoriz, int oldVert) {
        super.onScrollChanged(horiz, vert, oldHoriz, oldVert);
        outlineTextView.scrollTo(horiz, vert);
    }
}

注意:要监听EditText的滚动变化,在EditText输入内容较多,用户手动滚动EditText时,能够让描边的字体也滚动到指定位置。

相关文章

  • 2021-11-09(带有描边效果的label)

    带有描边效果的label

  • 字体描边

    (void)drawTextInRect:(CGRect)rect {CGSize shadowOffset = ...

  • text

    最普通的text字体 1 .实现一些普通的效果,json方式创建 2 .可以调字体,大小,粗细,描边,换行,斜体,...

  • 通过富文本描边功能实现字体加粗效果

    通过富文本描边功能实现字体加粗效果 如果NSStrokeWidthAttributeName设置一个正值,则实现的...

  • 文字描边效果

    简单描边 渐变描边 主要是用到背景渐变的样式。 SVG多彩描边效果 SVG动画霓虹灯效果

  • NGUI字体描边

    NGUI的UILabel中实现字体的描边是通过以方形的方式对字体网格顶点偏移一定位置后作为其描边网格。以这种方式描...

  • ios开发文字内描边效果

    实现了外描边效果之后,产品问内描边好做吗,我说简单!简单个蛋! 因为苹果本身的描边效果,是双向描边,不是单侧的,见...

  • 带有删除按钮的EditText

    先来看效果 这是一个带有删除按钮的输入文本框, 需要新建一个类继承自EditText, 先把代码贴出来, 然后在解...

  • ios 文字外描边效果

    设计提出文字描边效果,但是富文本自带的文字描边效果,是向文字内外同时描边 效果 所以需要自己实现,采用的方法是重写...

  • Edittext监听输入打折位数,只需点击两次按键

    首先,不用想,Edittext加入输入类型 接下来加入edittext的输入监听 效果就是,只需要点两次数字就可以...

网友评论

      本文标题:输入字体带有描边效果的EditText

      本文链接:https://www.haomeiwen.com/subject/vdrfddtx.html