2011-12-08 17 views
31

Nella mia applicazione su tela voglio usare pennelli personalizzati come i pennelli nell'immagine allegata. Per favore qualcuno mi aiuti velocemente come posso creare pennelli personalizzati come l'immagine allegata?Come creare un pennello personalizzato per canvas in Android?

Nella mia app ho fatto la linea tratteggiata con codice seguente:

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

e ottenere l'effetto di sfocatura e rilievo utilizzando seguente codice:

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

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

enter image description here

risposta

20

Come si può vedere chiaramente, nessun effetto shader banale/rettangoli/cerchi può realizzare questo. Immagini/Bitmap sono usati.

Quindi, semplicemente disegnare ripetutamente bitmap utilizzando canvas.drawBitmap. Disegni la stessa bitmap ancora e ancora mentre il dito si muove.

Per aggiungere un colore personalizzato è possibile aggiungere un filtro semplice.

Un esempio

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

può dare qualche esempio di pennello dall'alto disponibili in questione uno qualsiasi? – Pratik

+0

sì, posso farlo :) – poitroae

+0

la tua risposta mi aiuta a disegnare una bitmap come pennello ma quando cambio colore colorfilter viene applicata all'intera riga – Hardik

Problemi correlati