2

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

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

4

2 回答 2

3

setContentView(View)需要 aView并且Canvas不是View.

我不确定您是否要自己创建一个Canvas。不过,有一些方法可以Canvas从 Android 框架传递给您。一种方法是创建一个自定义View. 为此,您需要创建一个扩展的新类View

重写View类时,您将能够重写onDraw(Canvas)方法。这可能是您想要在onCreate()您发布的代码中在您的方法中尝试执行的操作的地方。

此链接很好地概述了创建您自己的自定义视图所需的内容。

于 2011-06-30T21:41:22.617 回答
2

首先:如果您在指定的 x 和 y 位置绘制文本,则在右下角绘制它,从该像素开始。不会在您的画布上绘制任何内容。尝试 bm.getWidth()/2,高度与测试绘图相同。您可以稍后对其进行优化。

第二:Canvas 不是 View(不扩展 View 类)。您只能通过 set ContentView() 设置视图。我在这里推荐的是编写一个仅包含一个 ImageView 的 XML 布局,并通过 setContentView(R.layout.mylayout) 进行设置。

之后,您可以使用 findViewById() 获取该 ImageView 并使用 ImageView.setImageBitmap(bm) 在其上显示您的位图。使用位图创建画布后,您无需对画布进行任何操作。从那时起,您在画布内绘制的所有内容都会立即在位图中找到。因此,您不能在 XML 中指定 Canvas。它只是一个编辑图片的“编辑器”,可以这么说,而不是实际的 UI 元素。

于 2011-06-30T21:41:54.770 回答