Рисовать со старого холста - Android - PullRequest
1 голос
/ 28 октября 2010

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

Это мой текущий метод 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 ]

4 голосов
/ 29 октября 2010

Сам нашел ответ:)

@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);
}

Работает точно так, как задумано, создает непрерывный эффект рисования поверх старого холста

0 голосов
/ 28 октября 2010

Вам придется постоянно сохранять предыдущее изображение в ArrayList, а во время ondraw перебирать ArrayList, чтобы перерисовать все элементы.

как то так:

for (Graphic graphic : _graphics) {
    bitmap = graphic.getBitmap();
    coords = graphic.getCoordinates();
    canvas.drawBitmap(bitmap, coords.getX(), coords.getY(), null);
}
...