Несколько холстов в представлении

1

Я переопределил метод onDraw() следующим образом:

public void onDraw(Canvas canvas1){
Canvas canvas2 = new Canvas();

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.graphic1);
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.graphic2);

canvas1.drawBitmap(
          top,
          new Rect(0, 0, graphic1.getWidth(), graphic1.getHeight()),
          new Rect(0, 0, width, width),
          null);

canvas2.drawBitmap(
          top,
          new Rect(0, 0, graphic2.getWidth(), graphic2.getHeight()),
          new Rect(0, 0, width, width),
          null);

}

Отображается только графическое изображение1 на холсте1, canvas2 и graphic2 - нет. Как я могу отображать несколько холстов на одном представлении?

  • 0
    Вы ничего не делаете, чтобы прикрепить второй холст к представлению. Почему бы просто не нарисовать оба растровых изображения на холсте вида?
  • 0
    Я пытаюсь наложить несколько изображений на слои, поэтому я решил, что если я положу их на холст и переведу холст в разные места, я получу желаемый эффект. Также я нахожу обтравочные контуры на одних холстах, а на других нет. Как мне прикрепить холст к представлению?
Показать ещё 1 комментарий
Теги:
view
canvas
bitmap

1 ответ

2
Лучший ответ

Как говорится в комментарии, вы не прикрепляете Canvas2 ко всему. Вы создаете его каждый фрейм (что плохо), рисуя его, а затем позволяя ему перейти к нашей области, чтобы собирать мусор. Что вы должны сделать, это создать Canvas2 с поддержкой Bitmap в конструкторе вашего представления и сохранить его в качестве члена. Затем вы можете нарисовать его, а затем разбить его Bitmap на Canvas1. Например:

public MyCustomView(Context context)
{
    super(context);
    _canvas2 = new Canvas(_backingBitmap);
}

public void onDraw(Canvas canvas1)
{
Bitmap graphic1 = BitmapFactory.decodeResource(getResources(), R.drawable.graphic1);
Bitmap graphic2 = BitmapFactory.decodeResource(getResources(), R.drawable.graphic2);

canvas1.drawBitmap(
          top,
          new Rect(0, 0, graphic1.getWidth(), graphic1.getHeight()),
          new Rect(0, 0, width, width),
          null);

_canvas2.drawBitmap(
          top,
          new Rect(0, 0, graphic2.getWidth(), graphic2.getHeight()),
          new Rect(0, 0, width, width),
          null);

canvas1.drawBitmap(
          top,
          new Rect(0, 0, _backingBitmap.getWidth(), _backingBitmap.getHeight()),
          new Rect(0, 0, width, width),
          null);
}
  • 0
    Что такое _backingBitmap здесь.
  • 0
    Это просто растровое изображение, которое служит для хранения информации, отображаемой в Canvas.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню