gpt4 book ai didi

java - 使用 Canvas 在 ImageView 上绘制文本时出现问题

转载 作者:行者123 更新时间:2023-11-30 04:10:34 26 4
gpt4 key购买 nike

我正在尝试为我的 ListView 实现一个页脚,它将充当具有五个元素的菜单类型框架。我希望元素能够(动态地,基于用户输入)显示图像或文本(或者可能两者都显示,但我还没有)。最终它会更具交互性,但现在我正在尝试实现它,以便 ImageView(默认显示图像)将删除图像并显示文本。

我认为最好的实现方式是在 Canvas 上绘制文本并使用 android.view.View.draw(canvas c)方法将其绘制到 ImageView 上。但是,我在这样做时遇到了麻烦。具体来说,我几乎可以以任何方式修改 View (设置背景颜色、更改可绘制对象等),一切正常,绘制 Canvas 的代码可以正确编译,但它不会 运行时的任何东西。 View 完全保持不变。
(注意:我试图通过代码消除任何愚蠢的错误(即确保文本不是透明的/与 bg 颜色相同,确保文本绘制在 View 区域内,等等)但我不是 100% 它没有错误。)

我尝试绘制到传递给 onClick 函数的 View 和绘制到从传递的 View 构造的新 ImageView - 都不起作用。有没有人有什么建议?代码如下:

login_button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
Bitmap img = Bitmap.createBitmap( 60, 60, Config.ARGB_8888);
Canvas c = new Canvas();
c.setBitmap(img);

Paint myPaint = new Paint();
myPaint.setTypeface(mFace);
myPaint.setColor(android.R.color.black);
myPaint.setTextSize(2);
myPaint.setTextAlign(Paint.Align.LEFT);

String content = "testing";
c.drawText(content, 0,0, myPaint);
view.draw(c);//does nothing
ImageView view2 = (ImageView) view;
view2.setBackgroundColor(android.R.color.white); //this works perfectly
view2.draw(c);//does nothing
Toast.makeText(MainListView.this, ""+c.getHeight(), Toast.LENGTH_SHORT).show(); //making sure c has height - this returns 60 as expected
Toast.makeText(MainListView.this, "end of method", Toast.LENGTH_SHORT).show();
}
});

最佳答案

View.draw(Canvas) 将 View 绘制到 Canvas 上,而不是像您预期的那样相反。

如果您想按照现有的方式进行操作,则需要扩展现有的 View 类,可能是 TextViewImageView,并覆盖 onDraw(),如 Custom Components Dev Guide 中所述.

我想我会做的是使用类似 FrameLayout 的东西,并根据需要将其设置为包含适当的 TextViewImageView。这似乎比在 ImageView 中手动渲染文本更干净。

关于java - 使用 Canvas 在 ImageView 上绘制文本时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10923153/

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