Sacar de vieja lona - Android
-
27-09-2019 - |
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);
}
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);
}