2011-12-08 32 views
31

Trong ứng dụng canvas của tôi, tôi muốn sử dụng các cọ vẽ tùy chỉnh như cọ vẽ trong hình ảnh đính kèm. Vì vậy, ai đó giúp tôi nhanh như thế nào tôi có thể làm cho bàn chải tùy chỉnh như hình ảnh đính kèm?Làm thế nào để làm cho bàn chải tùy chỉnh cho vải trong Android?

Trong ứng dụng của tôi tôi đã làm dòng doted sử dụng đoạn mã sau:

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

và nhận Blur and Emboss hiệu quả sử dụng đoạn mã sau:

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

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

enter image description here

Trả lời

20

Như bạn có thể thấy rõ, không có hiệu ứng đổ bóng/hình chữ nhật/vòng tròn tầm thường nào có thể thực hiện được điều này. Hình ảnh/Bitmap được sử dụng.

Vì vậy, chỉ cần lặp lại nhiều lần các bitmap bằng cách sử dụng canvas.drawBitmap. Bạn vẽ cùng một bitmap một lần nữa và một lần nữa trong khi ngón tay di chuyển.

Để thêm màu tùy chỉnh, bạn có thể thêm bộ lọc đơn giản.

Một thí dụ

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

bạn có thể đưa ra một số ví dụ về bàn chải từ trên cao có sẵn trong câu hỏi bất kỳ một? – Pratik

+0

yep, tôi có thể làm điều đó :) – poitroae

+0

câu trả lời của bạn giúp tôi vẽ bitmap dưới dạng cọ nhưng khi tôi thay đổi màu colorfilter thì áp dụng cho toàn bộ dòng – Hardik

Các vấn đề liên quan