在画布上绘制文本并使其在屏幕上可见

时间:2011-06-30 21:32:50

标签: android bitmap android-canvas

此代码应该将文本转换为图像

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中没有这样的元素可以在代码中使用。

2 个答案:

答案 0 :(得分:3)

setContentView(View)需要ViewCanvas不是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元素。