Android - холст рисует сомнения - PullRequest
1 голос
/ 08 октября 2011

Я смотрю на один из примеров приложений от Google, который занимается сенсорным рисунком с использованием canvas:

http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/TouchPaint.html

У меня есть несколько сомнений:

  1. Я не могу понять, какова роль Canvas по сравнению с ролью растрового изображения.

  2. В функции drawPoint я не могу этого понятьфрагмент кода:

mCanvas.drawCircle(x, y, radius, mPaint);
mRect.set((int) (x - radius - 2), (int) (y - radius - 2),
          (int) (x + radius + 2), (int) (y + radius + 2));
invalidate(mRect);

Если круг уже нарисован на вышеупомянутом холсте, то что происходит в функции onDraw, где задан следующий код:

canvas.drawBitmap(mBitmap, 0, 0, null);

Ответы [ 3 ]

2 голосов
/ 08 октября 2011

Холст против растрового изображения

A Bitmap - это то, что предлагает название: нормальное изображение в виде растрового изображения. Класс Canvas является редактором для растровых изображений. Вы используете его для изменения растровых данных, он содержит все методы рисования. Этот принцип ведет себя подобно общим настройкам (если вы уже работали с ними) , у вас есть класс SharedPreferences, который содержит настройки, и класс Editor для изменения вещей.

Рисование окружностей

Этот код делает что-то похожее на двойную буферизацию . drawPoint() в основном рисует круг в mBitmap объекте. Но этот растровый объект еще не виден. Он существует в памяти. Когда вызывается onDraw(), он имеет аргумент Canvas, который представляет поверхность рисования вида. Все, что drawBitmap() делает здесь, - это использует подготовленное растровое изображение из памяти и рисует его в графическом представлении представлений, чтобы сделать его видимым.

¹ Используемый холст mCanvas привязан к mBitmap внутри onSizeChanged()

0 голосов
/ 08 октября 2011

если вы перейдете к ссылке на разработчик:

drawBitmap (Растровое изображение, плавающее влево, плавающая вершина, Paint paint)

Нарисуйте указанное растровое изображение с еговерхний / левый угол в (x, y), используя указанную краску, преобразованную текущей матрицей.

Тогда, если вы видите, что mBitmap не существует в классе, это вызываетэта переменная происходит от расширения из другого действия.

Canvas также имеет функцию setBitmap (Bitmap bitmap).Тогда решение состоит в том, чтобы рисовать на холсте, если вы установили в него растровый объект.

0 голосов
/ 08 октября 2011
  1. Из Android SDK:

    Класс Canvas содержит вызовы "draw". Чтобы нарисовать что-то, вам нужно 4 основных компонента: A Растровое изображение для хранения пикселей, Canvas для размещения вызовов рисования (запись в растровое изображение), примитив рисования (например, Rect, Путь, текст, растровое изображение) и краска (для описания цветов и стилей рисунка).

  2. Я предполагаю, что вы имеете в виду этот фрагмент:

    @Override protected void onDraw(Canvas canvas) {
        if (mBitmap != null) {
            canvas.drawBitmap(mBitmap, 0, 0, null);
        }
    }
    

    Ну, это похоже на переопределение унаследованного onDraw метода, который по умолчанию, вероятно, «ничего не делает», следовательно, переопределение, чтобы фактически дать ему некоторое поведение, в данном случае с ненулевым экземпляром Bitmap, заставляет холст рисовать это.

...