gpt4 book ai didi

java - 绘图 StaticLayout 无法正常工作

转载 作者:行者123 更新时间:2023-11-29 02:37:26 27 4
gpt4 key购买 nike

我已经实现了一个带有 Text.LayoutView,我正在绘制它,但我什么也没得到。这是我的代码

public class MyEfficientTextView extends View {
Layout textLayout;
SpannableStringBuilder spannableStringBuilder;
int width = 0, height = 0;
TextPaint textPaint;
CharSequence text;

public MyEfficientTextView(Context context) {
this(context, null, 0);
}

public MyEfficientTextView(Context context, @Nullable AttributeSet attrs) {
this(context, attrs, 0);
}

public MyEfficientTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
spannableStringBuilder = new SpannableStringBuilder();
}

public void setText(CharSequence charSequence) {
text = charSequence;
spannableStringBuilder.clear();
spannableStringBuilder.append(text);
textPaint = new TextPaint();
textPaint.setAntiAlias(true);
textPaint.setTextSize(16 * getResources().getDisplayMetrics().density);
textPaint.setColor(getResources().getColor(R.color.textColor));
textLayout = new StaticLayout(spannableStringBuilder, textPaint, width, Layout.Alignment.ALIGN_NORMAL, 1, 0, false);
invalidate();
}

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
if (w != width) {
width = w;
setText(text);
}
height = h;
}

@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.save();
if (textLayout != null) {
canvas.translate(getPaddingLeft(), getPaddingTop());
textLayout.draw(canvas);
}
canvas.restore();
}
}

这段代码只是为了测试它是否有效,效率不高。哪一部分是错误的,导致它无法呈现文本?

最佳答案

您应该覆盖 onMeasure 并设置 View 宽度/高度。您的示例代码将导致默认宽度/高度(可能为 0)。

关于java - 绘图 StaticLayout 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46253749/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com