2011-12-08 87 views
31

在我的畫布應用程序中,我想使用自定義畫筆,如刷子在附加image.so請有人幫助我快我如何使附加圖像自定義畫筆?如何在Android中爲畫布製作自定義畫筆?

在我的應用我做了點線使用下面的代碼:

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

並獲得使用下面的代碼模糊和浮雕效果:

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

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

enter image description here

回答

20

正如你可以清楚地看到,沒有瑣碎的着色器效果/矩形/圓圈可以完成此操作。 使用圖像/位圖。

因此只需使用canvas.drawBitmap重複繪製位圖。手指移動時,您一次又一次繪製相同的位圖。

要添加自定義顏色,您可以添加一個簡單的過濾器。

爲例

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

可以給你從上面所討論可用的任何一個刷的一些示例? – Pratik

+0

是的,我可以這樣做:) – poitroae

+0

你的答案幫助我畫一個位圖作爲畫筆,但是當我改變顏色過濾器的顏色,那麼它應用到整條線 – Hardik