2011-12-08 16 views
31

En mi aplicación de lienzo quiero usar pinceles personalizados como pinceles en la imagen adjunta. Por favor, que alguien me ayude rápido ¿Cómo puedo hacer pinceles personalizados como la imagen adjunta?¿Cómo hacer un pincel personalizado para lienzo en Android?

En mi aplicación Hice línea doted usando siguiente código:

mPaint.setPathEffect(new DashPathEffect(new float[] { 8, 8 }, 0)); 

y conseguir el efecto de desenfoque y relieve usando siguiente código:

mEmboss = new EmbossMaskFilter(new float[] { 1, 1, 1 }, 0.4f, 6, 3.5f); 

mBlur = new BlurMaskFilter(8, BlurMaskFilter.Blur.NORMAL); 

enter image description here

Respuesta

20

Como se puede ver claramente, no hay efectos de sombreado triviales/rectángulos/círculos que puedan lograr esto. Se utilizan imágenes/mapas de bits.

Así que simplemente dibuje repetidamente Bitmaps usando canvas.drawBitmap. Dibujas el mismo mapa de bits una y otra vez mientras el dedo se mueve.

Para agregar un color personalizado, puede agregar un filtro simple.

Un ejemplo

public class CanvasBrushDrawing extends View { 
    private Bitmap mBitmapBrush; 
    private Vector2 mBitmapBrushDimensions; 

    private List<Vector2> mPositions = new ArrayList<Vector2>(100); 

    private static final class Vector2 { 
     public Vector2(float x, float y) { 
      this.x = x; 
      this.y = y; 
     } 

     public final float x; 
     public final float y; 
    } 

    public CanvasBrushDrawing(Context context) { 
     super(context); 

// load your brush here 
     mBitmapBrush = BitmapFactory.decodeResource(context.getResources(), R.drawable.splatter_brush); 
     mBitmapBrushDimensions = new Vector2(mBitmapBrush.getWidth(), mBitmapBrush.getHeight()); 

     setBackgroundColor(0xffffffff); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 

     for (Vector2 pos : mPositions) { 
      canvas.drawBitmap(mBitmapBrush, pos.x, pos.y, null); 
     } 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 

     int action = event.getAction(); 
     switch (action) { 
     case MotionEvent.ACTION_MOVE: 
      final float posX = event.getX(); 
      final float posY = event.getY(); 
      mPositions.add(new Vector2(posX - mBitmapBrushDimensions.x/2, posY - mBitmapBrushDimensions.y/2)); 
      invalidate(); 
     } 

     return true; 
    } 
} 
+0

le puede dar algún ejemplo de pincel desde arriba disponibles en cuestión cualquiera? – Pratik

+0

sí, puedo hacerlo :) – poitroae

+0

su respuesta me ayuda a dibujar un mapa de bits como pincel, pero cuando cambio el colorfilter, se aplica a toda la línea – Hardik

Cuestiones relacionadas