Android中的美丽描边文字

SH.*_*SH. 8 android textview custom-view android-edittext textstyle

我知道如何使用自定义视图(EditText或TextView)来描边文字但我无法实现像这样的美丽的东西,这是使用Photoshop完成的.是的,它也有外影.Photoshop中的描边文字

到目前为止我所做的是调整笔画宽度和笔画连接样式.但是,如果我增加笔划宽度,则笔划会发生整个文本.据我所搜索,有一个名为MagicTextView的库,但它也无法提供上述结果.

更新:我根据@pskink的建议调整了一些内容.它现在有效.但是我不能再拖了.如果我拖动EditText,会出现一些像这样的奇怪线条. 文本视图上方的奇怪线条

这是代码:

@Override public void onDraw(Canvas canvas) {
  final int x = this.getLeft();
  final int y = this.getBottom();

  mText = this.getText().toString();

  p.setStrokeWidth(30);
  p.setStyle(Style.STROKE);
  p.setStrokeJoin(Join.ROUND);
  p.setColor(0xffffffff);

  canvas.drawText(mText, x, y, p);

  p.setStyle(Style.FILL);
  p.setColor(0xff000000);

  canvas.drawText(mText, x, y, p);
}
Run Code Online (Sandbox Code Playgroud)

Pet*_*ter 5

但是,如果我增加笔触宽度,则笔划会发生在整个文本中。

如果问题是笔触居中,并且您希望它位于文本之外,请参阅:Android Paint笔触宽度定位

您必须根据笔划预先计算所需的宽度和高度。

我建议尝试使用非常粗体的字体。在下图中,白色笔画将以红线为中心(这将是每个黑色字母的轮廓)。

在此处输入图片说明

回应您的更新

如果我拖动该EditText,则会显示一些奇怪的行。

该行可能是集中在EditText上的结果。您可以明确地删除焦点:Android:强制EditText删除焦点?

另外,您可以设置焦点的样式(如果它不会对UI的其余部分产生不利影响,则可能是不可见的):使用“ android:Theme.Holo.Light”时如何更改已聚焦的EditText的颜色?


SH.*_*SH. 5

经过几个小时的调整后,我已修复了更新问题中所述的怪异线路问题。我想我应该在这里发布答案。

@Override public void onDraw(Canvas canvas) {
    mText = this.getText().toString();

    p.setStyle(Style.STROKE);
    p.setStrokeJoin(Join.ROUND);
    p.setShadowLayer(10, 1, 1, 0xcfcccccc);

    canvas.drawText(mText, 0, getLineHeight(), p);

    p.clearShadowLayer();
    p.setStrokeWidth(35);
    p.setStrokeJoin(Join.ROUND);
    p.setStyle(Style.STROKE);
    p.setColor(0xffffffff);

    canvas.drawText(mText, 0, getLineHeight(), p);

    p.setStyle(Style.FILL);
    p.setColor(0xff000000);

    canvas.drawText(mText, 0, getLineHeight(), p);
    canvas.translate(xPos, yPos);
}
Run Code Online (Sandbox Code Playgroud)

xPos和yPos是ACTION_MOVEonTouch事件中的x和y值。并且我们需要将画布文本的行高添加为Y。