Pergunta

Estou criando um aplicativo que precisa ser capaz de desenhar novos gráficos na parte superior do último conjunto.

Este é o meu método atual 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);
    }   
}

Basicamente, preciso desenhar os novos gráficos como uma camada no topo da última, então o que estou procurando é uma maneira de carregar a imagem da última tela para a corrente.

Eu tentei descobrir isso usando o método Canvas.setBitmap (), mas ele age muito engraçado.

Qualquer ajuda apreciada :)

Ps se for necessário, a classe se estende SurfaceView e implementos SurfaceHolder.Callback

EDIT: Isso é o que eu tentei no método ondraw (), mas apenas forçar o fechamento

if(bitmap != null) {
        canvas.drawBitmap(bitmap, 0, 0, paint);
        canvas.setBitmap(bitmap);  
    }
Foi útil?

Solução

Encontrei a resposta :)

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

Funciona exatamente como pretendido, cria o efeito de se desenhar sobre a tela antiga continuamente

Outras dicas

Você precisará armazenar a imagem anterior persistentemente em uma lista de Array e, durante o OnDraw, percorrer a Arraylist para redesenhar todos os itens.

algo assim:

for (Graphic graphic : _graphics) {
    bitmap = graphic.getBitmap();
    coords = graphic.getCoordinates();
    canvas.drawBitmap(bitmap, coords.getX(), coords.getY(), null);
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top