Нарисуйте текст на холсте и сделайте его видимым на экране - PullRequest
2 голосов
/ 01 июля 2011

Этот код должен был конвертировать текст в изображение

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 ]

3 голосов
/ 01 июля 2011

setContentView(View) занимает View, а Canvas не является View.

Я не уверен, что вы хотите создать Canvas самостоятельно.Однако есть способы передать вам Canvas из Android Framework.Один из способов сделать это - создать пользовательский View.Для этого вам необходимо создать новый класс, который расширяет View.

. При переопределении класса View у вас будет возможность переопределить метод onDraw(Canvas).Вероятно, именно здесь вы хотите сделать то, что вы пытаетесь сделать, используя метод onCreate() в коде, который вы опубликовали.

Эта ссылка дает хороший обзор того, что требуется для созданияВаш собственный вид.

2 голосов
/ 01 июля 2011

Первое: если вы рисуете текст в указанных вами точках x и y, вы рисуете его в правом нижнем углу, начиная именно с этого пикселя.Ничто не будет нарисовано на вашем холсте.Попробуйте bm.getWidth () / 2, для высоты то же самое для тестового рисунка.Вы можете оптимизировать это позже.

Второе: Canvas не является представлением (не расширяет класс представления).Вы можете установить вид только через набор ContentView ().Здесь я рекомендую написать макет XML, содержащий только один ImageView, и установить его через setContentView (R.layout.mylayout).

После этого вы можете использовать findViewById () для захвата этого ImageView и использовать ImageView.setImageBitmap (bm), чтобы показать на нем свой растровый рисунок.Вам не нужно ничего делать с холстом, если вы создали его с помощью своего растрового изображения.Все, что вы рисуете внутри холста с этого момента, немедленно обнаруживается в растровом изображении.Поэтому вы не можете указать Canvas в XML.Это просто «Редактор» для редактирования изображений, а не фактический элемент пользовательского интерфейса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...