Создание растрового изображения из Drawable

Я собираюсь работать над приложением, которое требует перетаскивания на Canvas. По сути, я хочу взять ShapeDrawable и преобразовать его в Bitmap, который пользователь может перетаскивать по экрану. Это простое упражнение само по себе.

Однако я хочу добавить текст внутри моей формы. Есть ли способ добавить текст к самому drawable, а затем преобразовать его в растровое изображение? Я изучил создание TextView с рисунком в качестве фона.

Это лучший способ сделать это? Я как бы хочу избежать создания TextViews в своем коде. Любые советы приветствуются.

Редактировать 21.02.2013:

В ответ на сообщение 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 от 21.02.2013:

Я добавил:

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

к моему коду, и теперь появляется возможность рисования, но мой текст исчез (или просто скрыт).


person badgerduke    schedule 18.02.2013    source источник
comment
shape.setBounds(0, 0, bitmap.getWidth(), bitmap.getHeight()); решил мою проблему. Спасибо   -  person Ajay    schedule 23.07.2014


Ответы (1)


Я бы посоветовал вам попробовать что-то вроде этого, сначала создайте пустое растровое изображение:

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 на пустом растровом изображении, используя метод рисования ShapeDrawable.

myshapedrawable.draw(canvas);

Наконец, вы можете использовать метод drawText экземпляра холста для рисования текста на холсте.

person JustDanyul    schedule 18.02.2013
comment
это добавит shape.setBounds(0, 0, bitmap.getWidth(), bitmap.getHeight()); для Shape в xml специально иначе не получится - person Ajay; 23.07.2014