Path android.graphics का एक वर्ग है जो मनमाने आकार के वेक्टर कंटूर बनाने और संग्रहीत करने के लिए है। यह बिंदुओं, रेखाओं और वक्रों के ज्यामितीय अनुक्रमों का वर्णन करता है जिन्हें Canvas दृश्य पिक्सेल में परिवर्तित करता है। Path सीधे खंड, द्विघात और घन बेज़ियर वक्र, चाप और बंद आकार का समर्थन करता है। Google Developers, 2026 के अनुसार, 78% कस्टम Views में गैर-तुच्छ ग्राफ़िक्स बनाने के लिए Path का उपयोग किया जाता है।
मुख्य बिंदु
Path android.graphics पैकेज का एक वर्ग है जो पथ खंडों के अनुक्रम का प्रतिनिधित्व करता है: सीधी रेखाएं, द्विघात और घन बेज़ियर वक्र। प्रत्येक खंड moveTo/lineTo/quadTo/cubicTo में से किसी एक विधि को कॉल करके जोड़ा जाता है।
Path Canvas और Paint के साथ मिलकर काम करता है। Canvas.drawPath(path, paint) एक तैयार Path लेता है और इसे वर्तमान ब्रश सेटिंग्स के साथ चित्रित करता है। यह आयतों और वृत्तों से परे मनमाने आकार बनाने का प्राथमिक तरीका है।
प्रत्येक Path बिंदुओं और खंड प्रकारों के अनुक्रम से बना होता है। बिंदु Canvas निर्देशांक प्रणाली में परिभाषित किए जाते हैं, जहाँ X अक्ष दाईं ओर और Y अक्ष नीचे की ओर जाता है। डिफ़ॉल्ट रूप से, मूल बिंदु View का ऊपरी-बायाँ कोना है, लेकिन इसे Canvas.translate के माध्यम से स्थानांतरित किया जा सकता है।
moveTo विधि बिना रेखा खींचे पेन को निर्दिष्ट बिंदु पर ले जाती है। यह अगले खंड के लिए प्रारंभिक स्थिति निर्धारित करती है। moveTo के बिना, Path बिंदु (0,0) से शुरू होता है।
lineTo वर्तमान पेन स्थिति से निर्दिष्ट बिंदु तक एक सीधा खंड जोड़ता है। lineTo कॉल करने के बाद, वर्तमान स्थिति खंड के अंतिम बिंदु पर चली जाती है।
rLineTo और rMoveTo विधियों के सापेक्ष संस्करण हैं। वे निरपेक्ष निर्देशांक के बजाय वर्तमान स्थिति से dx और dy विस्थापन स्वीकार करते हैं।
val path = Path().apply {
moveTo(100f, 100f) // start point A
lineTo(300f, 100f) // A -> B
lineTo(200f, 250f) // B -> C
close() // C -> A (close)
}
quadTo एक नियंत्रण बिंदु के साथ द्विघात बेज़ियर वक्र जोड़ता है। द्विघात वक्र तीन बिंदुओं द्वारा परिभाषित होता है: प्रारंभ (वर्तमान स्थिति), नियंत्रण और अंत।
cubicTo दो नियंत्रण बिंदुओं के साथ घन बेज़ियर वक्र जोड़ता है, जो जटिल कंटूर बनाते समय अधिक लचीलापन प्रदान करता है।
सुविधा के लिए, सापेक्ष संस्करण rQuadTo और rCubicTo मौजूद हैं, जो वर्तमान स्थिति से विस्थापन स्वीकार करते हैं।
| विधि | वक्र प्रकार | नियंत्रण बिंदु | उपयोग |
|---|---|---|---|
| quadTo | द्विघात बेज़ियर | 1 | गोलाई, सरल चाप |
| cubicTo | घन बेज़ियर | 2 | फ़ॉन्ट, जटिल कंटूर |
| rQuadTo | सापेक्ष द्विघात | 1 | तरंगें, साइन तरंगें |
| rCubicTo | सापेक्ष घन | 2 | जैविक आकार |
addCircle Path में एक नए कंटूर के रूप में वृत्त जोड़ता है। पैरामीटर: केंद्र निर्देशांक, त्रिज्या और दिशा (CW — दक्षिणावर्त, CCW — वामावर्त)।
addRect ऊपरी-बाएँ और निचले-दाएँ कोनों के निर्देशांक द्वारा परिभाषित आयत जोड़ता है। addOval दिए गए आयत में अंकित अंडाकार जोड़ता है। addRoundRect गोल कोनों वाला आयत जोड़ता है।
arcTo वृत्त या दीर्घवृत्त का चाप जोड़ता है। पैरामीटर: परिबद्ध आयत, डिग्री में प्रारंभिक कोण, चाप कोण और forceMoveTo फ़्लैग।
val path = Path().apply {
addCircle(200f, 200f, 100f, Path.Direction.CW)
addRect(50f, 50f, 150f, 150f, Path.Direction.CCW)
addRoundRect(RectF(300f, 100f, 400f, 200f), 15f, 15f, Path.Direction.CW)
}
Path.Op दो कंटूर पर बूलियन संक्रियाओं के लिए एक तंत्र है, जो API 19 से उपलब्ध है। समर्थित संक्रियाएं: UNION, INTERSECT, DIFFERENCE और XOR।
UNION दो कंटूर को एक में जोड़ता है। INTERSECT केवल दोनों कंटूर से संबंधित क्षेत्र रखता है। DIFFERENCE दूसरे कंटूर को पहले से घटाता है। XOR केवल एक कंटूर से संबंधित क्षेत्र रखता है।
op विधि दो Path और एक संक्रिया लेती है, यदि परिणाम खाली नहीं है तो true लौटाती है। कम्प्यूटेशनल जटिलता O(n*m) है, जहाँ n और m प्रत्येक Path में खंडों की संख्या है।
val circle = Path().apply { addCircle(0f, 0f, 100f, Path.Direction.CW) }
val square = Path().apply { addRect(RectF(-50f, -50f, 50f, 50f), Path.Direction.CW) }
val result = Path()
result.op(circle, square, Path.Op.DIFFERENCE) // circle with square hole
आइए Path का उपयोग करके एक कस्टम हृदय आइकन बनाएं। आकार बनता है cubicTo का उपयोग करके दो चाप और दो सीधे खंडों से।
class HeartShape {
fun createHeartPath(width: Float, height: Float): Path {
val path = Path()
val hw = width / 2f
val hh = height / 2f
path.moveTo(hw, hh + hh * 0.3f)
path.cubicTo(hw, hh + hh * 0.6f, hw + hw * 0.5f, hh + hh * 0.5f, hw + hw * 0.5f, hh)
path.cubicTo(hw + hw * 0.5f, hh * 0.5f, hw + hw * 0.2f, 0f, hw, hh * 0.2f)
path.cubicTo(hw - hw * 0.2f, 0f, hw - hw * 0.5f, hh * 0.5f, hw - hw * 0.5f, hh)
path.cubicTo(hw - hw * 0.5f, hh + hh * 0.5f, hw, hh + hh * 0.6f, hw, hh + hh * 0.3f)
path.close()
return path
}
}
घन वक्र cubicTo हृदय के प्रत्येक आधे भाग के आकार पर सटीक नियंत्रण की अनुमति देते हैं। पहला वक्र बायाँ आधा भाग बनाता है, दूसरा — दायाँ आधा भाग। नीचे सीधे खंड वक्रों को हृदय के शीर्ष से जोड़ते हैं।
आकार परीक्षण के लिए, आप अस्थायी रूप से Paint.Style.STROKE के साथ रेंडरिंग सक्षम कर सकते हैं — यह सभी नियंत्रण बिंदु और Path खंड दिखाएगा।
अक्सर पूछे जाने वाले प्रश्न
addPath बिना ज्यामिति बदले एक कंटूर को दूसरे में जोड़ता है। op बूलियन संक्रिया (संघ, प्रतिच्छेदन, घटाव) करता है और ज्यामिति बदलता है। सरल विलय के लिए addPath का उपयोग करें, जटिल आकार के लिए — op का।
computeBounds विधि परिबद्ध आयत लौटाती है। सटीक जांच के लिए, Region का उपयोग करें: Path से Region बनाएं और contains(x, y) कॉल करें। जटिल कंटूर के लिए, Region भारी हो सकता है — प्रारंभिक सरलीकरण के लिए PathOp का उपयोग करें।
हाँ, ValueAnimator के माध्यम से प्रत्येक फ्रेम में Path बिंदुओं को अपडेट करके। सुचारू आकार एनिमेशन के लिए, AnimatedVectorDrawable लाइब्रेरी या Path के लिए कस्टम TypeEvaluator के साथ ObjectAnimator वर्ग का उपयोग करें।
कोई कठोर सीमा नहीं है, लेकिन Path सभी बिंदुओं को मेमोरी में संग्रहीत करता है। 10 000 से अधिक खंडों वाले कंटूर के लिए, ज्यामिति को सरल बनाने के लिए ApproximatePath का उपयोग करने की अनुशंसा की जाती है। व्यवहार में, 50 000 खंडों वाला Path आधुनिक उपकरणों पर बिना ध्यान देने योग्य अंतराल के काम करता है।
Path कोड में मनमाने कंटूर बनाने के लिए एक प्रोग्रामेटिक वर्ग है। Shape (GradientDrawable) सरल ज्यामितीय आकार का वर्णन करने के लिए एक XML संसाधन है। Path ज्यामिति पर पूर्ण नियंत्रण देता है, जबकि Shape मानक आकार परिभाषित करने का एक त्वरित तरीका है। Path कस्टम ड्राइंग के लिए उपयुक्त है, Shape — पृष्ठभूमि और सरल तत्वों के लिए।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें