текст в словаре на холсте Android - PullRequest
4 голосов
/ 23 ноября 2010

Я пытаюсь записать некоторые строки на холст (живые обои), однако длинная строка не переносится словами, есть ли способ сделать это?
Я думаю, что холст - единственное, что я могу использовать для этого, так как это живые обои.

Ответы [ 2 ]

11 голосов
/ 08 декабря 2010

Нет необходимости выполнять перенос слов.

Проверьте android.text.Layout и его подклассы android.text.StaticLayout и android.text.DynamicLayout

примерно так:1005 *

StaticLayout layout = new StaticLayout(text, txtpaint, textW,Layout.Alignment.ALIGN_NORMAL, 1.3f, 0, false);
txtcanvas.translate(xoffs, yoffs); //position the text
layout.draw(txtcanvas);
1 голос
/ 14 февраля 2014

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

Эта функциясоздать растровое изображение из параметров + макет XML в "just_a_textview".

private static Bitmap renderTextIntoBitmap(Context context, Bitmap.Config bitmapConfig, String text, int textColor, int maxTextWidth) {
    LayoutInflater inflater = LayoutInflater.from(context);
    TextView tv = (TextView) inflater.inflate(R.layout.just_a_textview, null);
    tv.setText(text);
    tv.setMaxWidth(maxTextWidth);

    int widthSpec = View.MeasureSpec.makeMeasureSpec(maxTextWidth, View.MeasureSpec.EXACTLY);
    int heightSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);

    tv.measure(widthSpec, heightSpec);
    tv.layout(0, 0, tv.getMeasuredWidth(), tv.getMeasuredHeight());
    tv.setTextColor(textColor);

    Bitmap bitmap = Bitmap.createBitmap(tv.getWidth(), tv.getHeight(), bitmapConfig);
    Canvas canvas = new Canvas(bitmap);
    tv.draw(canvas);
    return bitmap;
}

Вы не хотите делать это в каждом кадре, но если у вас есть растровое изображение, его рисование на холсте происходит очень быстро.И это дает вам всю гибкость ЛЮБОГО вида Android.

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

...