Рисовать из старого холста - Android
-
27-09-2019 - |
Вопрос
Я делаю приложение, которое нужно иметь возможность нарисовать новую графику на вершине последнего набора.
Это мой текущий метод 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.settmap (), но он действует очень смешно.
Любая помощь оценила :)
PS Если это нужно, класс расширяется SurfaceView
и реализация SurfaceHolder.Callback
Редактировать: это то, что я пробовал в методе Ondraw (), но это просто принудительно закрывается
if(bitmap != null) {
canvas.drawBitmap(bitmap, 0, 0, paint);
canvas.setBitmap(bitmap);
}
Решение
Нашел ответ сам :)
@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);
}