Właśnie próbowałem wymyślić, jak to zrobić i nie mogłem znaleźć dobrego przewodnika w Internecie, ale w końcu to rozgryzłem. Jak zasugerował Steve Pomeroy, musisz zrobić coś bardziej zaangażowanego. Aby uzyskać efekt konturu tekstu, rysujesz tekst dwukrotnie: raz grubym konturem, a następnie drugi raz rysujemy tekst główny nad konturem. Ale zadanie jest łatwiejsze, ponieważ można bardzo łatwo dostosować jeden z przykładów kodu dostarczonych z SDK, a mianowicie ten pod tą nazwą w katalogu SDK: "/ samples / android- / ApiDemos / src / com / example / android /apis/view/LabelView.java ”. Które można również znaleźć w witrynie programisty Androida tutaj .
W zależności od tego, co robisz, bardzo łatwo jest zauważyć, że będziesz musiał dokonać tylko drobnych modyfikacji w tym kodzie, takich jak zmiana go na rozszerzenie z TextView itp. Zanim odkryłem ten przykład, zapomniałem nadpisać onMeasure () (co musisz zrobić oprócz zastąpienia onDraw (), jak wspomniano w przewodniku „Tworzenie niestandardowych komponentów” na stronie Android Developer), co jest jednym z powodów, dla których miałem problemy.
Kiedy już to zrobisz, możesz zrobić to, co ja:
public class TextViewOutline extends TextView {
private Paint mTextPaint;
private Paint mTextPaintOutline;
...
private void initTextViewOutline() {
mTextPaint = new Paint();
mTextPaint.setAntiAlias(true);
mTextPaint.setTextSize(16);
mTextPaint.setColor(0xFF000000);
mTextPaint.setStyle(Paint.Style.FILL);
mTextPaintOutline = new Paint();
mTextPaintOutline.setAntiAlias(true);
mTextPaintOutline.setTextSize(16);
mTextPaintOutline.setColor(0xFF000000);
mTextPaintOutline.setStyle(Paint.Style.STROKE);
mTextPaintOutline.setStrokeWidth(4);
setPadding(3, 3, 3, 3);
}
...
...
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawText(mText, getPaddingLeft(), getPaddingTop() - mAscent,
mTextPaintOutline);
canvas.drawText(mText, getPaddingLeft(), getPaddingTop() - mAscent, mTextPaint);
}
Tak więc, aby uzyskać efekt konturu tekstu, rysujesz tekst dwukrotnie: raz grubym konturem, a następnie drugi raz rysujemy tekst główny nad konturem.