Рисовать со старого холста - Android
Я делаю приложение, которое должно рисовать новую графику поверх последнего набора.
Это мой текущий метод onDraw() -
protected void onDraw(Canvas canvas) {
canvas.drawColor(Color.WHITE);
if(points.size() > 0) {
//do some stuff here - this is all working ok
canvas.drawLine(p1.x, p1.y, p2.x, p2.y, linePaint);
}
}
По сути, мне нужно нарисовать новую графику в виде слоя поверх последнего, так что я ищу способ перенести изображение последнего холста в текущий.
Я попытался выяснить это сам, используя метод canvas.setBitmap(), но он действует очень забавно.
Любая помощь приветствуется:)
PS если нужно, то класс расширяется SurfaceView
и реализует SurfaceHolder.Callback
Редактировать: это то, что я пытался в методе onDraw(), но он просто принудительно закрывает
if(bitmap != null) {
canvas.drawBitmap(bitmap, 0, 0, paint);
canvas.setBitmap(bitmap);
}
2 ответа
Сам нашел ответ:)
@Override
protected void onDraw(Canvas c) {
if(bitmap != null && canvas != null) {
canvas.drawLine(p1.x, p1.y, p2.x, p2.y, linePaint);
c.drawBitmap(bitmap, 0, 0, linePaint);
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
bitmap = Bitmap.createBitmap(width, height, Config.RGB_565);
canvas = new Canvas(bitmap);
canvas.drawColor(Color.WHITE);
}
Работает точно так, как задумано, создает непрерывный эффект рисования поверх старого холста
Вам придется постоянно сохранять предыдущее изображение в ArrayList, а во время ondraw перебирать ArrayList, чтобы перерисовать все элементы.
что-то вроде этого:
for (Graphic graphic : _graphics) {
bitmap = graphic.getBitmap();
coords = graphic.getCoordinates();
canvas.drawBitmap(bitmap, coords.getX(), coords.getY(), null);
}