मैं एंड्रॉइड के लिए एक उन्नत वास्तविकता अनुप्रयोग बनाने का प्रयास कर रहा हूं और सतह के दृश्यों को ले जाने की समस्या में आया हूं। मुझे कैमरे के पूर्वावलोकन को प्रदर्शित करने के लिए एक सतह दृश्य की आवश्यकता है जिस पर मैं ग्राफिक्स ओवरले करूँगा, और मुझे अपने ग्राफिक्स को आकर्षित करने के लिए सतह दृश्य की आवश्यकता है। इस दूसरी सतह को कैमरा पूर्वावलोकन के ऊपर भी खींचा जाना चाहिए, लेकिन एक पारदर्शी पृष्ठभूमि है। मेरे वर्तमान कार्यान्वयन में, मेरे पास सतह के दृश्य दोनों काम कर रहे हैं और दिख रहे हैं जैसा कि उन्हें माना जाता है, लेकिन पृष्ठभूमि पारदर्शी नहीं है और इसलिए कैमरे के पूर्वावलोकन सतह दृश्य पर चित्रित ग्राफिक्स के साथ दूसरे सतह दृश्य की कोई उपस्थिति नहीं है। यह कैसे प्राप्त किया जा सकता है? कई स्टैक ओवरफ्लो प्रश्नों के साथ-साथ अन्य मंचों को खोजने पर मैं इस मामले से संबंधित कई विवादित विचारों में आया हूं। कुछ कहते हैं कि एंड्रॉइड में लेयरिंग सतह के दृश्य असंभव हैं जबकि अन्य कहते हैं कि यह एक अलग लेआउट (फ्रेमलेआउट बनाम लिनियरलाउट?) का उपयोग करने का मामला है, विशेष रूप से, मेरे कार्यान्वयन में दो विचार शामिल हैं: एक वर्ग, कस्टमकैमेरा व्यू, जो सतह दृश्य और कक्षा को बढ़ाता है , CustomDrawView, जो CustomCameraView के बाद दिखाई देने वाले CustomDrawView के साथ फ़्रेमलेआउट में स्थित SurfaceView भी बढ़ाता है। इन्हें कैसे स्तरित किया जा सकता है ताकि कस्टमड्राव्यू कस्टमकैमेरा व्यू पर अतिरंजित दिखाई दे?एंड्रॉइड में एक फ्रेमलेआउट में स्तरित सतह दृश्य
उत्तर
मुझे लगता है कि बहुत से लोगों ने यह कोशिश की है। एक Google इंजीनियर ने कहा (here) स्पष्ट रूप से, आपको सतह दृश्यों को ढेर करने से बचना चाहिए। यहां तक कि अगर किसी को ऐसा करने के लिए कुछ चाल मिल गई है, तो यह शायद असंगत है और समस्याओं का कारण बन जाएगी।
मैं इस तीन विकल्प देता है, आपकी आवश्यकताओं के आधार लगता है:
- देखें (रों) भूतल दृश्य के शीर्ष पर
कैमरा पूर्वावलोकन के लिए एक सतह देखें का प्रयोग करें और ढेर शीर्ष पर विचार इसका इस दृष्टिकोण का नुकसान यह है कि "सामान्य" दृश्यों पर ड्राइंग ए) धीमा है और बी) यूआई थ्रेड में होता है। यदि आप धागे को स्वयं लागू करते हैं तो आप चारों ओर मिल सकते हैं। लेकिन आम तौर पर, यह संभवतः यह तरीका है कि यदि आपके ओवरले में यूआई तत्वों या कुछ ड्रायबल्स जैसे कुछ शामिल हैं जिन्हें अक्सर अद्यतन करने की आवश्यकता नहीं होती है।
- एक SurfaceView
इस में सब कुछ करते हैं रनटाइम के दौरान यो बेहतर प्रदर्शन और कम भूमि के ऊपर दे देंगे। आपके पास सिर्फ एक भूतल दृश्य है। अपने SurfaceView पर ओवरले को मिश्रित करें और वहां सबकुछ खींचें। बेशक, आप दोनों दृष्टिकोणों को जोड़ सकते हैं।
- एक GLSurfaceView
में सब कुछ करते हैं यह शायद वास्तविक प्रदर्शन के लिए जाने का रास्ता है। उपरोक्त की तरह, लेकिन GLSurfaceView में ओपनजीएल बनावट के लिए कैमरा दृश्य प्रतिपादन के साथ।
मैं इस काम के निम्नलिखित दृष्टिकोण का उपयोग कर कैमरे के SurfaceView ऊपर 2 पारदर्शी विचारों होने मिला:
मेरे गतिविधि onCreate()
विधि में अपने सभी विचारों सेट, मुझे लगता है कि किसी भी लेआउट फ़ाइल का कोई उपयोग नहीं करते हैं। यह इस प्रकार है के रूप में दिखता है:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(null); //savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
cameraPreview = new CameraPreview(this);
addContentView(cameraPreview, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
animationView = new AnimationView(this);
addContentView(animationView, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
crosslinesView = new CrosslinesView(this);
addContentView(crosslinesView, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
}
cameraPreview
प्रकार SurfaceView
, animationView
की है और crosslinesViews
प्रकार View
के हैं। 2 बाद के विचारों के onDraw()
निम्नानुसार दिखते हैं:
protected void onDraw(Canvas canvas) {
// Have the view being transparent
canvas.drawARGB(0, 0, 0, 0);
// Your drawing code goes here
// ...
}
शुभकामनाएँ!
- 1. सतह दृश्य (एंड्रॉइड)
- 2. एक सतह दृश्य में कैमरा पूर्वावलोकन को फ़िट करना
- 3. फ्रेमलेआउट
- 4. एंड्रॉइड ओपनजीएल छवि प्रसंस्करण - बिना सतह दृश्य
- 5. एंड्रॉइड कैमरा सतह देखें
- 6. एंड्रॉइड: OnPreviewFrame कभी सतह दृश्य के बिना नहीं बुलाया
- 7. एंड्रॉइड कैमरा सतह लगातार
- 8. सतह दृश्य में थ्रेड रोकने के बावजूद SurfaceView थ्रेड में शून्य कैनवास, (केवल एंड्रॉइड 4/आईसीएस
- 9. एक स्तरित अनुप्रयोग में अपवाद हैंडलिंग
- 10. स्तरित वास्तुकला में इकाई फ्रेमवर्क
- 11. स्तरित विंडो में ओपनजीएल स्टीरियो
- 12. कैमरा पूर्वावलोकन के लिए अदृश्य सतह दृश्य
- 13. सतह दृश्य में एक छवि को एनिमेट करना और घूर्णन करना
- 14. एंड्रॉइड में एक दृश्य युक्त विंडो खोजें
- 15. एंड्रॉइड। एक सूची दृश्य में रेडियोबटन
- 16. ग्रहण में कस्टम एंड्रॉइड दृश्य दृश्य संपादक
- 17. फ्रेमलेआउट से एक टुकड़ा नहीं हटा सकता है?
- 18. एक सूची दृश्य (एंड्रॉइड)
- 19. एंड्रॉइड में सूची दृश्य सूची
- 20. एंड्रॉइड में एक सूची दृश्य में एनीमेशन जोड़ना
- 21. 3 स्तरित आर्किटेक्चर में त्रुटि हैंडलिंग
- 22. एंड्रॉइड। कैसे सतह (ओपन) पर वीडियो
- 23. स्तरित आर्किटेक्चर में इकाई की रूपरेखा
- 24. एंड्रॉइड कैमरा - ऐप ने नल सतह
- 25. एंड्रॉइड व्यू या सतह दृश्य, मुझे किस का उपयोग करना चाहिए?
- 26. वीडियो को कैप्चर करने के लिए सतह दृश्य का उपयोग
- 27. सतह के बिना एंड्रॉइड कैमरा का उपयोग करें
- 28. ओपनजीएल सतह दृश्य विभिन्न डीपीआई के लिए स्केलिंग
- 29. स्तरित अनुप्रयोग: डेटाबेस में फ़ाइलस्टाइल में स्टोर फ़ाइल
- 30. एकाधिक पिकर दृश्य एक दृश्य में?
क्या आप अपने दृश्य के एक्सएमएल कोड और शायद एक त्वरित स्क्रीन पोस्ट करना चाहते हैं? तब कुछ लोग परीक्षण और समझ सकते थे। –