2011-06-11 10 views
5

Estoy aprendiendo Android escribiendo un juego y tengo un problema con la API de gráficos.Dibujar mapa de bits en el clip actual en el lienzo con borde (Pintura)

Quiero dibujar una imagen en la forma de un Camino y luego añadir un borde en el Camino. Pude recortar la imagen con Path pero no puedo encontrar una forma de agregarle borde. Pensé que sería simple porque la API admite el objeto Paint en los métodos Canvas.draw *.

actualización

En la pregunta original, mi ruta contiene dos rectángulos y Christopher @-Souvey contestadas correctamente. Sin embargo, tengo otro problema cuando trato de agregar otro método clipPath().

Actualicé el código anterior añadiendo un círculo más a la ruta. Aquí está mi nuevo código:

Bitmap srcImage = BitmapFactory.decodeStream(getAssets().open("panda.jpg")); 
Bitmap bitmapResult = Bitmap.createBitmap(srcImage.getWidth(), srcImage.getHeight(), Bitmap.Config.ARGB_8888); 
Path path = new Path(); 

// This is my border 
Paint paint = new Paint(); 
paint.setStyle(Style.STROKE); 
paint.setColor(Color.RED); 
paint.setStrokeWidth(2); 
paint.setAntiAlias(true); 

Canvas canvas = new Canvas(bitmapResult); 

// Overlay two rectangles 
path.addRect(10, 10, 70, 70, Path.Direction.CCW); 
path.addRect(40, 40, 120, 120, Path.Direction.CCW); 
canvas.drawPath(path , paint); 
canvas.clipPath(path, Region.Op.INTERSECT); 

path.reset(); 
path.addCircle(40, 80, 20, Path.Direction.CCW); 
canvas.drawPath(path , paint); 
canvas.clipPath(path, Region.Op.DIFFERENCE); 

// The image is drawn within the area of two rectangles and a circle 
// Although I suppose that puting Paint object into drawBitmap() method will add a red border on result image but it doesn't work 
canvas.drawBitmap(srcImage, 0, 0, paint); 

((ImageView)this.findViewById(R.id.imageView1)).setImageBitmap(bitmapResult); 

aquí es el resultado de mi código: http://i.stack.imgur.com/8j2Kg.png

Y esto es lo que espero: http://i.stack.imgur.com/iKhIr.png

¿Me echo nada para hacer que funcione?

+0

El elemento de pintura en drawBitmap no es el color del borde: http://developer.android.com/reference/android/graphics/Canvas.html#drawBitmap(android.graphics.Bitmap, android.graphics.Matrix, android. graphics.Paint) –

+0

Podemos crear bordes con drawRect(), drawCircle() con Paint. ¿Cómo es que no funciona para drawBitmap() –

Respuesta

1

Trate de usar canvas.drawPath(path, paint) después de la drawBitmap Es posible que tenga que poner en un canvas.save antes de que el clip y canvas.restore antes de la drawPath (no estoy seguro de si el accidente cerebrovascular ocurre dentro o fuera de las líneas de trayectoria).

+1

Solo para información, el trazo ocurre fuera de las líneas de ruta –

Cuestiones relacionadas