2012-06-24 17 views
5

Aquí está el código de una extensión simple de un ImageView que permite al usuario dibujar con el dedo.ImageView: el método onDraw dibuja "detrás" del fondo de la imagen, no en la parte superior

public class MyImageView extends ImageView { 

    List<Point> points = new ArrayList<Point>(); 
    Paint paint = new Paint(); 

    public MyImageView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    @Override 
    public void onDraw(Canvas canvas) { 
     for (Point point : points) { 
      canvas.drawCircle(point.x, point.y, 5, paint); 
      // Log.d(TAG, "Painting: "+point); 
     } 
     super.onDraw(canvas); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     super.onTouchEvent(event); 
     Point point = new Point(); 
     point.x = event.getX(); 
     point.y = event.getY(); 
     points.add(point); 
     invalidate(); 
     Log.d("", "point: " + point); 
     return true; 
    } 

    class Point { 
     float x, y; 
     @Override 
     public String toString() { 
      return x + ", " + y; 
     } 
    } 
} 

Esto funciona bastante bien.

Ahora, quiero utilizar este código para dibujar en la parte superior de un mapa de bits.

utilicé:

MyImageView ivPic = (MyImageView) dialog.findViewById(R.id.ivPic); 
ivPic.setImageBitmap(picture); 

Pero el dibujo se dibuja "detrás" del mapa de bits:

enter image description here

¿Tiene alguna idea de lo que puedo sacar en la "cima" de la ¿Bitmap?

+0

¿Ha logrado obtener un mapa de bits con sus dibujos y su mapa de bits? estoy haciendo lo mismo y no puedo salvar el mapa de bits alterado –

Respuesta

5

he cambiado el orden en onDraw método, puse super.onDraw(canvas); al principio y creo que funciona ahora

0

me responde a mi propia pregunta, acaba de encontrar la respuesta:

ivPic.setBackgroundDrawable(new BitmapDrawable(getResources(),picture)); 

No sé si esa es la mejor práctica, pero que funciona para mí ...

2

anulación y utilizar dispatchDraw Método, i lo utilizó para dibujar sobre vistas

+0

Mosh ¿todavía lo recuerdas? ¿Qué pones en el método de envío overridenDraw? – quinestor

+0

@quinestor qué? –

+0

Tu amigo ha guardado mi semana en este momento. Muchas gracias. Lo usé en un RecyclerView y funcionó perfectamente. Desde API> 23, el es un método onDrawForeground (Canvas canvas) que hace exactamente eso. Pero estoy soportando API> = 16. –

Cuestiones relacionadas