2011-12-08 14 views
31

मेरे कैनवास एप्लिकेशन में मैं संलग्न छवि में ब्रश जैसे कस्टम ब्रश का उपयोग करना चाहता हूं। इसलिए कृपया कोई मेरी मदद करें तेज़ी से मैं कस्टम छवि जैसे कस्टम ब्रश कैसे बना सकता हूं?एंड्रॉइड में कैनवास के लिए कस्टम ब्रश कैसे बनाएं?

मेरे ऐप में मैं निम्नलिखित कोड का उपयोग कर Doted लाइन बनाया:

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

संबंधित मुद्दे