此代码应该将文本转换为图像
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Paint paint = new Paint();
paint.setStyle(Paint.Style.FILL);
paint.setColor(Color.RED);
paint.setTextSize(16);
paint.setAntiAlias(true);
paint.setTypeface(Typeface.MONOSPACE);
Bitmap bm = Bitmap.createBitmap(16, 16, Bitmap.Config.ALPHA_8);
float x = bm.getWidth();
float y = bm.getHeight();
Canvas c = new Canvas(bm);
c.drawText("Test", x, y, paint);
}
这段代码好吗?如果是,我如何在屏幕上显示这个新的位图?我试过这个产生错误的代码
setContentView(c); //<- ERROR!
我对元素Canvas
感到困惑,因为XML中没有这样的元素可以在代码中使用。
答案 0 :(得分:3)
setContentView(View)
需要View
而Canvas不是View
。
我不确定您是否想要自己创建Canvas
。有一些方法可以从Android框架传递给您Canvas
。您可以通过创建自定义View
来实现此目的。为此,您需要创建一个扩展View
。
覆盖View
课程时,您可以覆盖onDraw(Canvas)
方法。这可能是您想要在您发布的代码中的onCreate()
方法中尝试执行的操作。
This link概述了创建自定义视图所需的内容。
答案 1 :(得分:2)
首先:如果您在指定的x和y位置绘制文本,则绘制它 在右下角,从该像素开始。画布上不会显示任何内容。尝试bm.getWidth()/ 2,高度与测试图相同。您可以稍后对其进行优化。
第二:Canvas不是View(不扩展View类)。您只能通过设置ContentView()设置视图。我在这里推荐的是编写一个只包含一个ImageView的XML布局,并通过setContentView(R.layout.mylayout)进行设置。
之后,您可以使用findViewById()来抓取ImageView并使用ImageView.setImageBitmap(bm)在其上显示您的位图。 一旦使用位图创建了画布,就不必对画布执行任何操作。您从该点开始在画布内绘制的所有内容都会立即在位图中找到。 因此,您无法在XML中指定Canvas。它只是编辑图片的“编辑器”,可以说而不是实际的UI元素。