2013-05-28 5 views
7

के अंदर स्ट्रोक मैं पथ की स्ट्रिंग चौड़ाई के साथ पथ का उपयोग करके परिभाषित आकार को आकर्षित करना चाहता हूं, जहां सभी स्ट्रोक पथ के अंदर आधे स्ट्रोक के अंदर और आधा बाहर है।एंड्रॉइड - पथ

धन्यवाद,

कार्ल

+0

मुझे समस्या नहीं आती है, क्या आप अधिक विशिष्ट हो सकते हैं? आप क्या कह रहे हैं "सभी स्ट्रोक पथ के अंदर आधे स्ट्रोक के अंदर और आधा बाहर" है? – Marek

+1

मान लीजिए कि मैं स्ट्रोक के साथ एक आकृति खींचता हूं जो काले रंग में 10 पिक्सल चौड़ा होता है और फिर स्ट्रोक के साथ आकृति को खींचता है जो लाल रंग में 5 पिक्सल चौड़ा होता है, तो लाल पथ काला पथ की आधा चौड़ाई होगी और यह होगा बीच में, आधा स्ट्रोक आकृति सीमा के अंदर होगा और आधा बाहर होगा। इसके बजाय मैं चाहता हूं कि पूरे स्ट्रोक आकार सीमा के अंदर हों। उपर्युक्त उदाहरण में, इसका मतलब यह होगा कि लाल स्ट्रोक काले स्ट्रोक के एक तरफ होगा, आकार सीमा के निकटतम पक्ष – user2430147

उत्तर

1

यह स्ट्रोक (यानी, अंदर, केंद्र या बाहर) की स्थिति को नियंत्रित नहीं कर सकते लगता है। अधिक जानकारी के लिए उल्लेख करने के लिए: Android Paint stroke width positioning

मेरे समाधान स्ट्रोक चौड़ाई ऑफसेट है, जबकि उदाहरण के लिए ड्राइंग,

final RectF rectF = new RectF(halfStrokeWidth, halfStrokeWidth, width - halfStrokeWidth, height - halfStrokeWidth); 
canvas.drawRoundRect(rectF, roundX, roundY, paint); 
1

आप मदद के लिए CornerPathEffect वर्ग का उपयोग कर सकते हैं! एक उदाहरण के रूप में एक गोल आकार ड्राइंग लेना।

कैनवास.drawRoundRect() विधि का उपयोग करके त्रिज्या के साथ पृष्ठभूमि रंग ड्राइंग करते समय और पेंट सेट Style.FILL, आप एक गोल आयत आकार प्राप्त कर सकते हैं। और फिर स्टाइल.स्ट्रोके के साथ एक राउंड रेक्ट सीमा पर चित्रण करें और उसी विधि का उपयोग करके पेंट की सेटिंग की चौड़ाई, आप सीमा प्राप्त कर सकते हैं।

कोड:

before

के CornerPathEffect कोशिश करते हैं::

mBackgroundRectF.set(0, 0, mWidth, mHeight); 
canvas.drawRoundRect(mBackgroundRectF, mRadius, mRadius, mBackgroundPaint); 
// edge ajustment because paint stroke style is center align 
float edge = mBorderWidth/2; 
mBackgroundRectF.set(edge, edge, mWidth - edge, mHeight - edge); 
canvas.drawRoundRect(mBackgroundRectF, mRadius, mRadius, mBorderPaint); 

अब यह की तरह लग रहा है, यह एक मैं चाहता हूँ जो कुछ पृष्ठभूमि और सीमा के बीच ऑफसेट गया है

mBackgroundRectF.set(0, 0, mWidth, mHeight); 
canvas.drawRoundRect(mBackgroundRectF, mRadius, mRadius, mBackgroundPaint); 
// edge ajustment because paint stroke style is center align 
float edge = mBorderWidth/2; 
mBackgroundRectF.set(edge, edge, mWidth - edge, mHeight - edge); 
// use CornerPathEffect and then use drawRect() method 
mBorderPaint.setPathEffect(new CornerPathEffect(mRadius/2)); 
canvas.drawRect(mBackgroundRectF, mBorderPaint); 

अब यह सही दिखता है:

after

+0

डबल स्ट्रोक चौड़ाई समस्या को हल कर सकती है! – YXP

1

उपयोग Canvas#clipPath(Path, Op)। लेकिन ध्यान रखें कि एक हार्डवेयर त्वरित कैनवास में पथ पर क्लिपिंग के लिए समर्थन एंड्रॉइड 3.0 और reintroduced in 4.3 में हटा दिया गया था। 3.0-4.2 के लिए स्पष्ट रूप से workaround था, लेकिन मेरे पास इसका परीक्षण करने का कोई तरीका नहीं है।

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