Intereting Posts
Установите эффект пульсации на изображение Ключевое событие не запускается в Firefox на Android, когда предложение слова включено Что такое «tools: context» в файлах макета Android? Где добавить папку классов в Android Studio? Подзаголовок панели инструментов не отображается Eclipse не запускает приложение для Android на эмуляторе во второй раз Создайте с помощью маркера карты Google BitmapDescriptorFactory Android HttpUrlConnection EOFException Не удалось выбрать строку в списке в раскрывающемся списке 4.1, но работает в android 5.0 Как предотвратить изменение размера EditText при вводе пользователем? Android-растровое изображение Когда следует перерабатывать растровое изображение с использованием LRUCache? Viewpager с динамической высотой не работает (всегда используйте высоту первого фрагмента) ConstraintLayout Vs RelativeLayout & CardView – Кэш и пространство памяти Android.database.sqlite.SQLiteException: нет такого столбца: aa:, при компиляции: выберите Name from stud Где Address = aa

Как поместить текст в drawable?

Я пытаюсь создать возможность «летать на лету», чтобы использовать ее в качестве фона для пользовательского метода linearlayout. Он должен иметь метки хэша и такие (без особого труда), но также иметь номера, обозначающие, что означают хэш-метки (например, линейка). Я знаю, что могу просто создавать текстовые элементы и помещать их в линейный график и просто иметь метки хэша в drawable, но я надеюсь, что они тоже будут внутри drawable, поэтому мне не нужно выполнять вычисления в два раза.

Solutions Collecting From Web of "Как поместить текст в drawable?"

Я прочитал книгу «Профессиональная разработка приложений Android 2» (by Reto Meier). В частности, он содержит примерный проект, в котором вы создаете простое приложение компаса, где вы «рисуете» текст, маркеры и т. Д.

Краткое пояснение состоит в том, что вы создаете класс, который расширяет класс android.view.View и переопределяет метод onDraw(Canvas) .

Весь исходный код из книги можно скачать здесь: http://www.wrox.com/WileyCDA/WroxTitle/Professional-Android-2-Application-Development.productCd-0470565527,descCd-DOWNLOAD.html . Если вы загрузите код и заглянете в проект под названием «Глава 4 Компас», я считаю, что вы найдете то, что ищете. 🙂

Ниже приведен краткий пример TextDrawable который работает как обычный, но позволяет указать текст как единственную переменную-конструктор:

 public class TextDrawable extends Drawable { private final String text; private final Paint paint; public TextDrawable(String text) { this.text = text; this.paint = new Paint(); paint.setColor(Color.WHITE); paint.setTextSize(22f); paint.setAntiAlias(true); paint.setFakeBoldText(true); paint.setShadowLayer(6f, 0, 0, Color.BLACK); paint.setStyle(Paint.Style.FILL); paint.setTextAlign(Paint.Align.LEFT); } @Override public void draw(Canvas canvas) { canvas.drawText(text, 0, 0, paint); } @Override public void setAlpha(int alpha) { paint.setAlpha(alpha); } @Override public void setColorFilter(ColorFilter cf) { paint.setColorFilter(cf); } @Override public int getOpacity() { return PixelFormat.TRANSLUCENT; } } 

Глядя на ответ Плумана и пытаясь приспособить его к моим потребностям, я напал на класс, который используется для камеры в этой ссылке

Вот код из класса TextDrawable . Выглядит довольно simillar с Plowmans, но для меня работает лучше:

 import android.content.res.Resources; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.ColorFilter; import android.graphics.Paint; import android.graphics.Paint.Align; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.util.TypedValue; public class TextDrawable extends Drawable { private static final int DEFAULT_COLOR = Color.WHITE; private static final int DEFAULT_TEXTSIZE = 15; private Paint mPaint; private CharSequence mText; private int mIntrinsicWidth; private int mIntrinsicHeight; public TextDrawable(Resources res, CharSequence text) { mText = text; mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mPaint.setColor(DEFAULT_COLOR); mPaint.setTextAlign(Align.CENTER); float textSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, DEFAULT_TEXTSIZE, res.getDisplayMetrics()); mPaint.setTextSize(textSize); mIntrinsicWidth = (int) (mPaint.measureText(mText, 0, mText.length()) + .5); mIntrinsicHeight = mPaint.getFontMetricsInt(null); } @Override public void draw(Canvas canvas) { Rect bounds = getBounds(); canvas.drawText(mText, 0, mText.length(), bounds.centerX(), bounds.centerY(), mPaint); } @Override public int getOpacity() { return mPaint.getAlpha(); } @Override public int getIntrinsicWidth() { return mIntrinsicWidth; } @Override public int getIntrinsicHeight() { return mIntrinsicHeight; } @Override public void setAlpha(int alpha) { mPaint.setAlpha(alpha); } @Override public void setColorFilter(ColorFilter filter) { mPaint.setColorFilter(filter); } }