我知道如何使用自定义视图(EditText或TextView)来描边文字但是我无法实现像这样的美丽的东西,这是使用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);
}
答案 0 :(得分:4)
但是,如果我增加笔划宽度,笔划会发生整个文本。
如果问题是笔划居中,并且您希望笔划位于文本之外,请参阅:Android Paint stroke width positioning
您必须根据笔划预先计算所需的宽度和高度。
我建议尝试一种非常大胆的字体。在下图中,白色笔划将以红色线为中心(这将是每个黑色字母的轮廓)。
回复更新:
如果我拖动EditText,会出现一些奇怪的行。
该行可能是关注EditText的结果。您可以明确删除焦点:Android: Force EditText to remove focus?
或者,您可以设置焦点的样式(如果它不会对UI的其余部分产生负面影响,则可能不可见):How to change the color of a focused EditText when using "android:Theme.Holo.Light"?
答案 1 :(得分:4)
经过几个小时的调整后,我修复了更新问题中陈述的奇怪线问题。我想我应该在这里发帖作为答案。
@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);
}
xPos和yPos是来自ACTION_MOVE
onTouch事件的x和y值。我们需要为画布文本添加行高作为Y.