Как установить drawable в текст TextView?

Короткий вопрос:

Предположим, у меня есть TextView, и я хочу, чтобы сам текст (а не фон) имел набор для рисования (а не только сплошной цвет), как мне это сделать?

Единственное решение, которое я нашел, это это , но оно предназначено только для градиентных цветов, и я хочу иметь возможность использовать любой рисуемый.


person android developer    schedule 09.04.2013    source источник


Ответы (2)


Хорошо, я думаю, что нашел возможное решение, но у меня есть несколько замечаний по этому поводу:

  1. Это не для любого рисования. Это для растрового изображения, поэтому вам нужно будет каким-то образом преобразовать его в растровое изображение.

  2. Для этого требуется, чтобы вы знали размер textView (для этой цели вы можете использовать this)

  3. Требуется, чтобы у вас было достаточно памяти для масштабированного растрового изображения того же размера, что и textView.

  4. Не уверен, как заставить его работать на символ или на строку.

Вот код:

public static void setBitmapOnTextView(final TextView tv, final Bitmap bitmap) {
    final TileMode tile_mode = TileMode.CLAMP;
    final int height = tv.getHeight();
    final int width = tv.getWidth();
    final Bitmap temp = Bitmap.createScaledBitmap(bitmap, width, height, true);
    final BitmapShader bitmapShader = new BitmapShader(temp, tile_mode, tile_mode);
    tv.getPaint().setShader(bitmapShader);
}

Я надеюсь, что есть лучшее решение для этого.

person android developer    schedule 17.04.2013

отредактировано:

Я не верю, что возможно изменить фактический штрих, используемый в тексте, лучший вариант, который у вас есть, - это использовать другой шрифт.

В Android вы можете «рисовать» любой текст, используя любой шрифт *.ttf.

для этого вы должны включить файл в папку с ресурсами и вызвать из кода (возможно, есть способ использовать XML, но я не знаю, как это сделать):

TypeFace mFont = TypeFace.createFromAsset(mContext.getAssets(), "my_font.ttf");
mTextView.setTypeFace(mFont);

Я считаю, что это закрытие, которое вы получите, чтобы нанести другой штрих на текст.

исходный ответ:

TextView имеет следующие свойства:

Drawable Top
Drawable Bottom
Drawable Left
Drawable Right

который вы установили в XML. Или вы можете позвонить

setCompoundDrawables(left, top, right, bottom)

из кода!

person Budius    schedule 09.04.2013
comment
Я считаю, что «разработчик Android» хотел спросить, что шрифт/штрихи для текста самого текстового представления должны быть сделаны с возможностью рисования. Предлагаемое вами решение поместит текст вокруг текста, но не решит то, что было задано. - person mastDrinkNimbuPani; 09.04.2013
comment
@mastDrinkNimbuPani Да, это правильно. Я не хочу, чтобы вокруг текста было что-то, связанное с чертежами, текст должен быть тем, который имеет возможность рисования. Как будто текстуры накладываются на текст. Одной приятной вещью может быть градиент, но я также хотел бы иметь возможность использовать изображения. - person android developer; 10.04.2013
comment
ооо..... Я не правильно понял вопрос, чем. Я отредактирую ответ, пожалуйста, проверьте его. - person Budius; 10.04.2013
comment
@Budius Использование шрифтов ttf позволяет вам точно установить, как вы хотите отображать каждый символ, отредактировав сам шрифт? Если да, то я об этом не знал (был уверен, что это всегда черно-белые шаблоны). Однако это все еще не то, о чем я просил. Кстати, когда вы редактируете свой ответ, опубликуйте любой комментарий, чтобы он уведомлял об изменениях. - person android developer; 17.04.2013
comment
Я никогда раньше не создавал шрифт (просто брал их в отделе дизайна), но я думаю, что да, вы можете (fontforge.org). И я разместил комментарий, в котором упоминается мое редактирование, он выше вашего комментария, 10 апреля 12:10. - person Budius; 17.04.2013