9

カスタム ビュー (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);
}
4

2 に答える 2

6

数時間の微調整の後、更新された質問に記載されている奇妙な行の問題を修正しました。答えとしてここに投稿する必要があると思います。

@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);
}

ACTION_MOVExPos と yPos はonTouch イベントからの x と y の値です。また、キャンバス テキストの行の高さを Y として追加する必要があります。

于 2015-05-03T18:08:18.727 に答える
5

ただし、ストローク幅を大きくすると、テキスト全体にストロークが発生しました。

ストロークが中央にあることが問題で、テキストの外側に配置したい場合は、次を参照してください: Android ペイント ストローク幅の配置

ストロークに応じて、目的の幅と高さを事前に計算する必要があります。

非常に太字のフォントを試すことをお勧めします。下の画像では、白いストロークが赤い線 (各黒い文字の輪郭) の中央に配置されます。

ここに画像の説明を入力

あなたの更新に応じて:

その EditText をドラッグすると、奇妙な行が表示されます。

この行は、EditText にフォーカスした結果である可能性があります。明示的にフォーカスを削除できます: Android: Force EditText to remove focus?

または、フォーカスをスタイルすることもできます (UI の残りの部分に悪影響を及ぼさない場合は、おそらく非表示にすることもできます): How to change the color of a focused EditText when using "android:Theme.Holo.Light"?

于 2015-04-08T05:31:33.983 に答える