Несколько холстов в представлении - PullRequest
2 голосов
/ 31 мая 2011

Я переопределил метод 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);

}

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

1 Ответ

3 голосов
/ 31 мая 2011

Как сказано в комментарии, вы не присоединяете Canvas2 ни к чему. Вы создаете его каждый кадр (что плохо), рисуете на нем, а затем позволяете ему выйти за рамки возможного сбора мусора. Что вы должны сделать, это создать Canvas2 с поддержкой 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);
}
...