Вопрос

Я делаю приложение, которое нужно иметь возможность нарисовать новую графику на вершине последнего набора.

Это мой текущий метод 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);
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top