アプリに以下のようなテキストを表示したい。私はこれを達成するためにPaint
クラスをスタイル_FILL_AND_STROKE
_で使用しています。ただし、色を設定するために使用できるメソッドsetColor()
は1つだけです。
異なるストロークと塗りつぶしの色を設定するにはどうすればよいですか?
カスタムTextView内(EditTextでは機能しません):
@Override
public void onDraw(Canvas canvas)
{
final ColorStateList textColor = getTextColors();
TextPaint Paint = this.getPaint();
Paint.setStyle(Style.STROKE);
Paint.setStrokeJoin(Join.ROUND);
Paint.setStrokeMiter(10);
this.setTextColor(strokeColor);
Paint.setStrokeWidth(strokeWidth);
super.onDraw(canvas);
Paint.setStyle(Style.FILL);
setTextColor(textColor);
super.onDraw(canvas);
}
FILL_AND_STROKEは使用しないでください。 FILLで1回描画し、次に色を変更して、STROKEで描画します。
(これは四角形で機能します。STROKEがテキストでまったく機能しないかどうかはわかりません。実際に試して調べる必要があります。)
上記の最初の解決策を使用して、このアイデアを思い付きました。より大きなSTROKEのテキストを配置し、それを小さなFILL_AND_STROKEテキストでオーバーレイします。
mScorePaint = new TextPaint();
mScorePaint.setTextSize(63);
mScorePaint.setStyle(Style.STROKE);
mScorePaint.setStrokeJoin(Join.ROUND);
mScorePaint.setStrokeMiter(10.0f);
mScorePaint.setStrokeWidth(frameWidth/50.0f); // about 12
mScorePaint.setColor(0xffff0000); // black
c.drawText(Integer.toString(mScore), x, y, mScorePaint); // red first
mScorePaint.setStrokeWidth(frameWidth/125.0f); // about 5
mScorePaint.setColor(0xff000000); // red
c.drawText(Integer.toString(mScore), x, y, mScorePaint); // black on top
FILLだけではストローク属性がまったく表示されず、非常に薄くなっていたからです。
完全にはわかりませんが、多分これを使用できます:
TextView test = (TextView) findViewById(R.id.test);
test.setShadowLayer(float, float, float, int);