Desenhe da tela antiga - Android
-
27-09-2019 - |
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);
}
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);
}