Pregunta

Estoy haciendo una aplicación que necesita ser capaz de dibujar nuevos gráficos en la parte superior de la última serie.

Este es mi método actual 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);
    }   
}

Básicamente, tengo que dibujar los nuevos gráficos como una capa en la parte superior de la última, así que lo que estoy buscando es una manera de llevar la imagen de la última lona para la corriente.

He tratado de averiguar a mí mismo usando el método canvas.setBitmap () pero actúa muy divertido.

Cualquier ayuda apreciado:)

P.S si es necesario, la clase extiende la SurfaceView e implementos SurfaceHolder.Callback

Edit: Esto es lo que he tratado en el método onDraw () pero simplemente forzar cierra

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

Solución

encontrado la respuesta a mí mismo:)

@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 exactamente como se pretende, se crea el efecto de dibujo en la parte superior de la vieja lona continua

Otros consejos

tendrá que almacenar la imagen anterior persistentemente en un ArrayList, y durante OnDraw, bucle a través del ArrayList para volver a dibujar todos los elementos.

algo como esto:

for (Graphic graphic : _graphics) {
    bitmap = graphic.getBitmap();
    coords = graphic.getCoordinates();
    canvas.drawBitmap(bitmap, coords.getX(), coords.getY(), null);
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top