3

我将开发一个需要在Canvas. 基本上,我想获取 aShapeDrawable并将其转换为Bitmap可以让用户在屏幕上拖动的 a。这本身就是一个简单的练习。

但是,我想在我的形状中添加文本。有没有办法可以将文本添加到drawable自身然后转换为位图?我研究了TextView以可绘制对象为背景创建一个。

这是最好的方法吗?我有点想避免TextViews在我的代码中创建。任何建议表示赞赏。

2013 年 2 月 21 日编辑:

为了回应 JustDanyul 的帖子,我有以下代码:

int width = 40;
int height = 40;
Bitmap.Config config = Bitmap.Config.ARGB_8888;
bitmap = Bitmap.createBitmap(width, height, config);
Canvas canvas = new Canvas(bitmap);
Resources res = context.getResources();
Drawable shape = res.getDrawable(R.drawable.miss_scarlet);
shape.draw(canvas);
Paint paint = new Paint();
paint.setTextSize(fontSize);
paint.setColor(Color.BLACK);
canvas.drawText(gameToken.getDbName(), 5, 5, paint);

当我在另一个画布上绘制位图时,我的可绘制对象没有出现。可绘制对象本身很好(我将其作为 TextView 的背景进行了测试)。文字出现。我在这段代码中遗漏了什么吗?

<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <corners
        android:radius="4dp" />
    <solid
        android:color="#FF0000" />
    <stroke
        android:width="3dp"
        android:color="#000000" />
</shape>

编辑#2 2013 年 2 月 21 日:

我补充说:

shape.setBounds(0, 0, bitmap.getWidth(), bitmap.getHeight());

到我的代码,现在drawable出现了,但我的文本消失了(或者只是隐藏了)。

4

1 回答 1

3

我建议你尝试这样的事情,首先,创建一个空位图:

int w = 500  
int h = 500; // or whatever sizes you need
Bitmap.Config config = Bitmap.Config.ARGB_8888;
Bitmap bitmap = Bitmap.createBitmap(w, h, config);

下一步,创建一个新的画布实例,它会渲染到您新创建的位图上

Canvas canvas = new Canvas(bitmap);

现在,您可以使用 ShapeDrawable 的 draw 方法将 ShapeDrawable 绘制到空位图上

myshapedrawable.draw(canvas);

最后,您可以使用画布实例的 drawText 方法在画布上绘制文本。

于 2013-02-18T22:32:50.517 回答