Android में Path — यह क्या है, निर्माण विधियाँ और कैसे बनाएं

लेखक: IT Sectr प्रकाशित: 2026-07-21 पढ़ने का समय: 8 मिनट

Path android.graphics का एक वर्ग है जो मनमाने आकार के वेक्टर कंटूर बनाने और संग्रहीत करने के लिए है। यह बिंदुओं, रेखाओं और वक्रों के ज्यामितीय अनुक्रमों का वर्णन करता है जिन्हें Canvas दृश्य पिक्सेल में परिवर्तित करता है। Path सीधे खंड, द्विघात और घन बेज़ियर वक्र, चाप और बंद आकार का समर्थन करता है। Google Developers, 2026 के अनुसार, 78% कस्टम Views में गैर-तुच्छ ग्राफ़िक्स बनाने के लिए Path का उपयोग किया जाता है।

मुख्य बिंदु

  • Path एक वेक्टर कंटूर है जो ड्राइंग के लिए ज्यामितीय संक्रियाओं का अनुक्रम परिभाषित करता है।
  • moveTo, lineTo, quadTo और cubicTo रेखाएं और वक्र बनाने की मूल विधियाँ हैं।
  • addCircle, addRect, addOval — त्वरित आकार जोड़ने के लिए तैयार आकृतियाँ।
  • close अंतिम बिंदु को पहले से एक सीधी रेखा से जोड़कर कंटूर बंद करता है।
  • Op (Path.Op) बूलियन संक्रियाएं सक्षम करता है: संघ, प्रतिच्छेदन और कंटूर का घटाव।

Android में Path क्या है?

Path android.graphics पैकेज का एक वर्ग है जो पथ खंडों के अनुक्रम का प्रतिनिधित्व करता है: सीधी रेखाएं, द्विघात और घन बेज़ियर वक्र। प्रत्येक खंड moveTo/lineTo/quadTo/cubicTo में से किसी एक विधि को कॉल करके जोड़ा जाता है।

Path Canvas और Paint के साथ मिलकर काम करता है। Canvas.drawPath(path, paint) एक तैयार Path लेता है और इसे वर्तमान ब्रश सेटिंग्स के साथ चित्रित करता है। यह आयतों और वृत्तों से परे मनमाने आकार बनाने का प्राथमिक तरीका है।

प्रत्येक Path बिंदुओं और खंड प्रकारों के अनुक्रम से बना होता है। बिंदु Canvas निर्देशांक प्रणाली में परिभाषित किए जाते हैं, जहाँ X अक्ष दाईं ओर और Y अक्ष नीचे की ओर जाता है। डिफ़ॉल्ट रूप से, मूल बिंदु View का ऊपरी-बायाँ कोना है, लेकिन इसे Canvas.translate के माध्यम से स्थानांतरित किया जा सकता है।

रेखाएं बनाना: moveTo और lineTo

moveTo विधि बिना रेखा खींचे पेन को निर्दिष्ट बिंदु पर ले जाती है। यह अगले खंड के लिए प्रारंभिक स्थिति निर्धारित करती है। moveTo के बिना, Path बिंदु (0,0) से शुरू होता है।

lineTo — सीधी रेखा

lineTo वर्तमान पेन स्थिति से निर्दिष्ट बिंदु तक एक सीधा खंड जोड़ता है। lineTo कॉल करने के बाद, वर्तमान स्थिति खंड के अंतिम बिंदु पर चली जाती है।

rLineTo और rMoveTo विधियों के सापेक्ष संस्करण हैं। वे निरपेक्ष निर्देशांक के बजाय वर्तमान स्थिति से dx और dy विस्थापन स्वीकार करते हैं।

kotlin
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

quadTo एक नियंत्रण बिंदु के साथ द्विघात बेज़ियर वक्र जोड़ता है। द्विघात वक्र तीन बिंदुओं द्वारा परिभाषित होता है: प्रारंभ (वर्तमान स्थिति), नियंत्रण और अंत।

cubicTo — घन बेज़ियर वक्र

cubicTo दो नियंत्रण बिंदुओं के साथ घन बेज़ियर वक्र जोड़ता है, जो जटिल कंटूर बनाते समय अधिक लचीलापन प्रदान करता है।

सुविधा के लिए, सापेक्ष संस्करण rQuadTo और rCubicTo मौजूद हैं, जो वर्तमान स्थिति से विस्थापन स्वीकार करते हैं।

विधि वक्र प्रकार नियंत्रण बिंदु उपयोग
quadTo द्विघात बेज़ियर 1 गोलाई, सरल चाप
cubicTo घन बेज़ियर 2 फ़ॉन्ट, जटिल कंटूर
rQuadTo सापेक्ष द्विघात 1 तरंगें, साइन तरंगें
rCubicTo सापेक्ष घन 2 जैविक आकार

तैयार आकृतियाँ: वृत्त, आयत और चाप

addCircle Path में एक नए कंटूर के रूप में वृत्त जोड़ता है। पैरामीटर: केंद्र निर्देशांक, त्रिज्या और दिशा (CW — दक्षिणावर्त, CCW — वामावर्त)।

addRect और addOval

addRect ऊपरी-बाएँ और निचले-दाएँ कोनों के निर्देशांक द्वारा परिभाषित आयत जोड़ता है। addOval दिए गए आयत में अंकित अंडाकार जोड़ता है। addRoundRect गोल कोनों वाला आयत जोड़ता है।

arcTo वृत्त या दीर्घवृत्त का चाप जोड़ता है। पैरामीटर: परिबद्ध आयत, डिग्री में प्रारंभिक कोण, चाप कोण और forceMoveTo फ़्लैग।

kotlin
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)

Path.Op दो कंटूर पर बूलियन संक्रियाओं के लिए एक तंत्र है, जो API 19 से उपलब्ध है। समर्थित संक्रियाएं: UNION, INTERSECT, DIFFERENCE और XOR।

डिज़ाइन में Path Op का अनुप्रयोग

UNION दो कंटूर को एक में जोड़ता है। INTERSECT केवल दोनों कंटूर से संबंधित क्षेत्र रखता है। DIFFERENCE दूसरे कंटूर को पहले से घटाता है। XOR केवल एक कंटूर से संबंधित क्षेत्र रखता है।

op विधि दो Path और एक संक्रिया लेती है, यदि परिणाम खाली नहीं है तो true लौटाती है। कम्प्यूटेशनल जटिलता O(n*m) है, जहाँ n और m प्रत्येक Path में खंडों की संख्या है।

kotlin
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 का उपयोग करके दो चाप और दो सीधे खंडों से।

kotlin
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 बूलियन संक्रिया (संघ, प्रतिच्छेदन, घटाव) करता है और ज्यामिति बदलता है। सरल विलय के लिए addPath का उपयोग करें, जटिल आकार के लिए — op का।

कैसे जांचें कि Path में कोई बिंदु है?

computeBounds विधि परिबद्ध आयत लौटाती है। सटीक जांच के लिए, Region का उपयोग करें: Path से Region बनाएं और contains(x, y) कॉल करें। जटिल कंटूर के लिए, Region भारी हो सकता है — प्रारंभिक सरलीकरण के लिए PathOp का उपयोग करें।

क्या Path को एनिमेट किया जा सकता है?

हाँ, ValueAnimator के माध्यम से प्रत्येक फ्रेम में Path बिंदुओं को अपडेट करके। सुचारू आकार एनिमेशन के लिए, AnimatedVectorDrawable लाइब्रेरी या Path के लिए कस्टम TypeEvaluator के साथ ObjectAnimator वर्ग का उपयोग करें।

Path का अधिकतम आकार क्या है?

कोई कठोर सीमा नहीं है, लेकिन Path सभी बिंदुओं को मेमोरी में संग्रहीत करता है। 10 000 से अधिक खंडों वाले कंटूर के लिए, ज्यामिति को सरल बनाने के लिए ApproximatePath का उपयोग करने की अनुशंसा की जाती है। व्यवहार में, 50 000 खंडों वाला Path आधुनिक उपकरणों पर बिना ध्यान देने योग्य अंतराल के काम करता है।

Android में Path, Shape से कैसे भिन्न है?

Path कोड में मनमाने कंटूर बनाने के लिए एक प्रोग्रामेटिक वर्ग है। Shape (GradientDrawable) सरल ज्यामितीय आकार का वर्णन करने के लिए एक XML संसाधन है। Path ज्यामिति पर पूर्ण नियंत्रण देता है, जबकि Shape मानक आकार परिभाषित करने का एक त्वरित तरीका है। Path कस्टम ड्राइंग के लिए उपयुक्त है, Shape — पृष्ठभूमि और सरल तत्वों के लिए।

सारांश

  • Path Android में मनमाने ज्यामितीय आकार का वर्णन करने के लिए एक वेक्टर कंटूर है।
  • moveTo प्रारंभिक बिंदु निर्धारित करता है, lineTo रेखाएं खींचता है, quadTo और cubicTo बेज़ियर वक्र खींचते हैं।
  • addCircle, addRect, addOval और addRoundRect तैयार ज्यामितीय आकार जोड़ते हैं।
  • close अंतिम और पहले बिंदु को जोड़कर कंटूर बंद करता है।
  • Path.Op बूलियन संक्रियाएं प्रदान करता है: UNION, INTERSECT, DIFFERENCE, XOR।
  • Path को एक बार बनाएं और CPU संसाधन बचाने के लिए पुनः उपयोग करें।
  • कंटूर के साथ एनिमेशन और पथ लंबाई अनुमान के लिए PathMeasure का उपयोग करें।

हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे

IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

परियोजना पर चर्चा करें

यह भी पढ़ें