Android画布上的word Wrapped tex

Android画布上的word Wrapped tex,android,text,canvas,word-wrap,Android,Text,Canvas,Word Wrap,我试图写一些字符串到画布(生活墙纸),但长字符串不得到字包装有什么办法吗 我认为画布是我唯一能用的东西,因为它是一张活生生的壁纸。不需要自己包装文字 查看android.text.Layout及其子类android.text.StaticLayout和android.text.DynamicLayout 大概是这样的: StaticLayout layout = new StaticLayout(text, txtpaint, textW,Layout.Alignment.ALIGN_NORMA

我试图写一些字符串到画布(生活墙纸),但长字符串不得到字包装有什么办法吗

我认为画布是我唯一能用的东西,因为它是一张活生生的壁纸。

不需要自己包装文字

查看android.text.Layout及其子类android.text.StaticLayout和android.text.DynamicLayout

大概是这样的:

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);

不确定这是否适用于您,但对于这些情况,我真的很喜欢简单地创建一个视图,对其进行布局,然后将其“屏幕截图”写入位图

此函数将从“just_a_textview”中的参数+xml布局创建位图

你不想在每一帧都这样做,但是一旦你有了位图,在画布上绘制它是非常快的。这为您提供了所有Android视图的灵活性

我知道如果你的文本是非常动态的,这将不起作用,但是你可以这样做,并使用画布矩阵来做任何你可能想做的缩放/旋转。
显然,这可以进一步优化性能,例如,通过拉出布局膨胀。

天哪,这不容易,有什么例子可以分享吗?我不确定这会起作用-从文档中可以看出:DynamicLayout是一种文本布局,在编辑文本时会自动更新。小部件使用它来控制文本布局。除非您正在实现自己的小部件或自定义显示对象,或者需要直接调用Canvas.drawText(),否则不需要直接使用此类。如果是这种情况,那么这将不起作用,因为在使用Canvas时需要调用Canvas.drawText(),它将起作用。实现您自己的自定义小部件正是这个问题的核心所在。layout.draw可能会在格式化后为您调用Canvas.drawText。请注意,您在画布中发送了draw call.Olof,我知道这样的评论不适用于+1或竖起大拇指,但非常感谢您的回答,为我节省了搜索正确工具的时间。对其他人来说,是的,这确实有效。
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;
}