2010-03-29 7 views
6

HI सभी,एंड्रॉइड के लिए नया - रनटाइम पर एक दृश्य खींचना

मैं अभी एंड्रॉइड के विकास के साथ शुरुआत कर रहा हूं। मैं अपने आईफोन अनुप्रयोगों में से एक बंदरगाह को देख रहा हूं, लेकिन रनटाइम पर एक दृश्य को आकर्षित करने के लिए मुझे नुकसान हुआ है (एक्सएमएल में एक दृश्य घोषित नहीं किया गया है)। असल में, मैं एक साधारण आयत खींचना चाहता हूं, लेकिन फिर तैयार होने के बाद अपने फ्रेम में हेरफेर करने में सक्षम होना चाहिए।

क्षमा करें अगर यह वास्तव में एक बहुत ही सरल सवाल है, लेकिन मुझे आईफोन एसडीके के बराबर कुछ नहीं मिल रहा है।

अग्रिम धन्यवाद!

उत्तर

7

ऐसा लगता है कि आप 2 डी ग्राफिक्स के साथ प्रयोग करना चाहते हैं - इसके लिए, आपको Canvas का उपयोग करना चाहिए। आप invalidate() विधि के माध्यम से कैनवास के चित्र को नियंत्रित कर सकते हैं, जो एंड्रॉइड को आपकी अनुकूलित onDraw() विधि को ट्रिगर करने वाली पूरी चीज़ को फिर से निकालने के लिए कहता है। आप XML फ़ाइल का उपयोग नहीं करना चाहते हैं, लेकिन कैनवास में डालने का यह सबसे आसान तरीका है - आपको XML सामग्री में इसकी सामग्री को परिभाषित करने की आवश्यकता नहीं है, लेकिन बस उस लेआउट फ़ाइल को बताएं। आपके आवेदन में कैनवास डालने का एक शक्तिशाली लेकिन सरल तरीका एक दृश्य को अनुकूलित करना है। उदाहरण के लिए, अपनी एक्सएमएल फ़ाइल में <your.package.CustomView android:.../> तत्व शामिल करें। फिर CustomView extends View कक्षा घोषित करें। किसी भी प्रकार का चित्र जो आप करना चाहते हैं, ऑन ड्रा() विधि में डाल दें।

उदाहरण के लिए, एक आयत खींचने के लिए, ऐसा कुछ करें।

//First you define a colour for the outline of your rectangle 
rectanglePaint = new Paint(); 
rectanglePaint.setARGB(255, 255, 0, 0); 
rectanglePaint.setStrokeWidth(2); 
rectanglePaint.setStyle(Style.STROKE); 

//Then create yourself a Rectangle 
Rect rectangle = new Rect(left, top, right, bottom) //in pixels 

//And here's a sample onDraw() 
@Override 
public void onDraw(Canvas canvas){ 
    rectangle.offset(2, 2); 
    canvas.drawRect(rectangle, rectanglePaint); 
} 

हर बार रद्द() अपने कार्यक्रम से कहा जाता है, दृश्य फिर से ताज़ा हो जाएगा और आयत ले जाया 2px नीचे और सही करने के लिए। नोट: मुख्य थ्रेड के साथ केवल तभी होता है 'प्रतीक्षा' होता है। दूसरे शब्दों में, यदि आपके पास लूप कॉलिंग कई बार अमान्य है, तो दृश्य वास्तव में तब तक नहीं खींचा जाएगा जब तक कि लूप समाप्त न हो जाए। आप इसके आसपास हो सकते हैं, लेकिन इससे अधिक जटिलता मिलती है। यह कैसे किया गया है इसके उदाहरण के लिए, Google से लूनरलैंडर उदाहरण गेम देखें - यह एक साधारण गेम है जो एक कस्टम व्यू, 2 थ्रेड, और निरंतर एनीमेशन को कार्यान्वित करने का तरीका दिखाता है।

+0

खूबसूरती से काम करता है, धन्यवाद! –

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