2011-12-08 47 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