7

का कारण बन रहा है मैं एंड्रॉइड के लिए एक मल्टीमीडिया वीडियो प्रोसेसिंग एप्लिकेशन पर काम कर रहा हूं, और मैंने कुछ समस्याएं निभाई हैं। मैं वीडियो प्रसंस्करण के विभिन्न चरणों के लिए FragmentPagerAdapter कक्षा का उपयोग कर कई अलग-अलग टुकड़ों के साथ उपयोग कर रहा हूं।एंड्रॉइड सर्फेस दृश्य स्क्रीन फ़्लिकर

मेरा पहला Fragment में SurfaceView और MediaPlayer है जो विभिन्न प्लेबैक नियंत्रणों के साथ इसे खिलाता है। मेरी समस्या तब होती है जब मैं खंड 1 (SurfaceView के साथ) से खंड 2 (इस समय खाली) से स्वाइप करता हूं। अगर मैंने अभी तक start() नहीं कहा है, तो कुछ भी असामान्य नहीं होता है, और मैं सामान्य रूप से टुकड़ों के बीच स्वाइप करने में सक्षम हूं। एक बार जब मैं start() पर कॉल करता हूं, तो जब मैं अगले Fragment पर स्वाइप करता हूं, तब भी पूरी स्क्रीन चालू और बंद हो जाती है, भले ही मैंने निष्क्रिय स्थिति में MediaPlayer डाला हो और यह SurfaceView पर फ़्रेम नहीं दे रहा है। एकमात्र चीज जो इसे रोकती है, वह तीसरे Fragment पर स्वाइप करके युक्त दृश्य के साथ सतह को नष्ट कर रही है, इसलिए FragmentPagerAdapterFragment एक को नष्ट कर देता है, या घर या बैक बटन के माध्यम से एप्लिकेशन से बाहर निकलता है ताकि दृश्य नष्ट हो जाए।

मैं अपने जीवन के लिए यह नहीं समझ सकता कि यह क्यों हो रहा है, शायद SurfaceView प्रतिपादन थ्रेड मुख्य UI थ्रेड के साथ हस्तक्षेप कर रहा है। LogCat पर कुछ भी असामान्य नहीं दिखाई देता है, या तो, मैं थोड़ा फंस गया हूँ। मैं अपने टेस्ट हार्डवेयर के रूप में एंड्रॉइड 4.1 के साथ गैलेक्सी नेक्सस चला रहा हूं।

किसी भी मदद की सराहना की जाएगी!

संयुक्त

अद्यतन: मैं FragmentPagerAdapter में setPrimaryItem() विधि अधिभावी एक विधि है कि पदानुक्रम से SurfaceView को हटा कॉल करने के लिए (अपने LinearLayout कंटेनर पर removeView() का प्रयोग करके) द्वारा अब के लिए एक समाधान खोजने के लिए प्रबंधित किया है जब वीडियो प्लेयर Fragment प्रदर्शित होने के लिए समाप्त हो जाता है, और उसके बाद फिर से सक्रिय होने पर SurfaceView को पुनर्स्थापित करता है। ऐसा होने पर अभी भी एक झपकी होती है, दुर्भाग्यवश, इसलिए अगर किसी के पास अतिरिक्त विचार हैं, तो मैं आभारी रहूंगा!

+0

इस उत्तर की जांच करें। आपकी समस्या इस तरह है: [लिंक] (http://stackoverflow.com/questions/8772862/surfaceview-flashes-black-on-load) – RATHI

उत्तर

4
Android Developers Blog

इस विजेट [SurfaceView] अपने आवेदन की खिड़की के पीछे रखा एक नई विंडो बनाने के द्वारा काम करता है से

। फिर यह नई विंडो को प्रकट करने के लिए आपके एप्लिकेशन की खिड़की के माध्यम से एक छेद पेंच करता है।

क्योंकि एक SurfaceView की सामग्री एप्लिकेशन की विंडो में नहीं रहती है, इसे प्रभावी रूप से परिवर्तित नहीं किया जा सकता है (स्थानांतरित, स्केल किया गया, घूर्णन) कुशलतापूर्वक। इससे ListView या ScrollView के अंदर SurfaceView का उपयोग करना मुश्किल हो जाता है।

यदि आप 4.0 या उससे ऊपर के लिए बिल्ड कर रहे हैं तो समाधान एक TextureView का उपयोग करना है। यदि आप वीडियो this thread प्रदर्शित करने के लिए एक TextureView का उपयोग करने में रुचि रखते हैं तो उपयोगी हो सकता है

+0

बहुत बढ़िया उत्तर .... मैंने इस समस्या को हल करने के लिए अपना 1 सप्ताह बिताया। .... अंततः SurfaceView/VideoView को हटा दिया और TextureView का उपयोग किया। –

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