2013-08-08 7 views
7

में "छेद" चित्रण करना मैं कस्टम दृश्य के ऑनड्रा विधि में इस तरह का एक आकार खींचने की कोशिश कर रहा हूं।कैनवास

दुर्भाग्य से, मैं कैनवास पर पारदर्शी सर्कल "कट" नहीं कर सकता, (एक रंग के साथ एक वृत्त खींचकर। ट्रांसपेरेंट)।

क्या मुझे पहले किसी अन्य बिटमैप में आकार खींचना चाहिए, फिर इसे ड्रॉ द्वारा प्रदान किए गए कैनवास पर खींचना चाहिए? या यह करने के लिए यह एक बेहतर (सरल) तरीका है?

mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); 
mPaint.setColor(Color.TRANSPARENT); 
mPaint.setStrokeWidth(4); 
mPaint.setStyle(Style.STROKE); 

canvas.drawColor(getResources().getColor(R.color.black_overlay)); 
canvas.drawCircle(-3*(this.getBottom()-this.getTop())/4, (this.getTop()+this.getBottom())/2, this.getBottom()-this.getTop(), mPaint); 

पुनश्च::

Custom shape

यहाँ कोड मैंने कोशिश की (Color.WHITE के साथ काम करता है) मैं वास्तविक आकृति मैं चाहता था मिल गया Color.WHITE का उपयोग करते समय: Result achieved with Color.WHITE

समाधान

@Override 
public void onDraw(Canvas canvas) 
{ 
    mBitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888); 
    mCanvas = new Canvas(mBitmap); 
    mCanvas.drawColor(getResources().getColor(R.color.black_overlay)); 
    mCanvas.drawCircle(-3*(getHeight())/4, (getHeight())/2, getHeight(), mPaint); 
    canvas.drawBitmap(mBitmap, 0, 0, null); 
} 
with 
mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); 
    mPaint.setStrokeWidth(4); 
    mPaint.setStyle(Style.STROKE); 
    mPaint.setXfermode(new PorterDuffXfermode(Mode.CLEAR)); 

नोट: createBitamp और नए कैनवास को ऑन ड्रा विधि से बाहर ले जाना चाहिए।

+0

अच्छी तरह से, उपयोग छवि यदि आप देखते हैं कि मैन्युअल बहुत ही जटिल है –

+0

रंग ट्रांसपेरेंट क्या है? आपने जो कुछ भी कोशिश की है उसका कुछ कोड क्यों पोस्ट न करें? देखें कि यह मदद करता है - http://stackoverflow.com/questions/9988671/android-r-color-transparent-not-fully-transparent – Sundeep

+0

रंग। ट्रांसपेरेंट एक एंड्रॉइड स्थिर है। – Tryum

उत्तर

9

सवाल जो अपनी स्थिति के लिए revealnt किया जा सकता है के होते हैं:

draw path with hole (android)

Android canvas - Draw a hole

Punch a hole in a rectangle overlay with HW acceleration enabled on View

http://www.mail-archive.com/[email protected]/msg232764.html

+0

मैंने 4 में से 3 लिंक की समीक्षा की, लेकिन इसे फिर से प्रयास करने के बाद, मैंने एक और बिटमैप का उपयोग करके अपना छेद पंच करने में कामयाब रहा। क्या मुझे यह उत्तर स्वीकार करना चाहिए या अपने अंतिम कोड के साथ अपना उत्तर देना चाहिए? – Tryum

+3

@ ट्रायम यह आपका निर्णय है। आप मेरा जवाब स्वीकार कर सकते हैं और +2 प्रतिष्ठा अंक प्राप्त कर सकते हैं या अपने कोड के साथ अपना जवाब लिख सकते हैं और 48 एच में स्वीकार कर सकते हैं (आपको प्रतिष्ठा प्राप्त नहीं होगी)। एक और समाधान भी है: अपना उत्तर लिखें और मेरा स्वीकार करें। धन्यवाद, – TN888