Я просто намагався зрозуміти, як це зробити, і не зміг знайти хорошого путівника в Інтернеті, але врешті-решт це зрозумів. Як запропонував Стів Померой, вам потрібно зробити щось більш залучене. Для того, щоб отримати ефект окресленого тексту, ви малюєте текст двічі: один раз товстим контуром, а потім другий раз малюємо основний текст над контуром. Але завдання полегшено, оскільки ви можете дуже легко адаптувати один із зразків коду, що надається разом із SDK, а саме той під цим іменем у вашому каталозі SDK: "/ sample / android- / ApiDemos / src / com / example / android /apis/view/LabelView.java ". Які також можна знайти на веб-сайті розробника Android тут .
Залежно від того, що ви робите, дуже легко помітити, що вам потрібно буде лише внести незначні зміни до цього коду, наприклад, змінити його на розширення з TextView тощо. Перш ніж я виявив цей зразок, я забув перевизначити onMeasure () (який ви повинні зробити на додаток до перевизначення onDraw (), як зазначено в посібнику "Створення користувацьких компонентів" на веб-сайті розробника Android), що є частиною того, чому у мене виникли проблеми.
Як тільки ви це зробите, ви зможете зробити те, що я зробив:
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);
}
Отже, щоб отримати контурний текстовий ефект, ви малюєте текст двічі: один раз товстим контуром, а потім другий раз малюємо основний текст над контуром.