मैं पूरी तरह से कुछ ऐसी चीज पर फंस गया हूं जो मैंने सोचा था कि कभी भी सबसे आसान बात होगी। मैं एक रिश्तेदार लेआउट में एक फ्रेम के अंदर एक वीडियो चलाने की कोशिश कर रहा हूँ।स्क्रीन के हिस्से पर वीडियो चलाएं
ध्यान दें कि एप्लिकेशन लैंडस्केप मोड में एक बहुत ही विशिष्ट डिवाइस (आर्कोस 101 इंटरनेट टैब) पर चलाने के लिए है, और वीडियो 480x360 के एक बहुत ही विशिष्ट आकार के साथ पूर्व-एन्कोड किए गए हैं, यही कारण है कि लेआउट में कुछ निश्चित है आकार।
यहाँ लेआउट
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<!-- Background -->
<ImageView
android:layout_width="980dp"
android:layout_height="568dp"
android:src="@drawable/bg_video" />
<TextView
android:id="@+id/video_headtext"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="73dp"
android:layout_marginLeft="255dp"
android:textColor="#FFFFFF"
android:textSize="16dp" />
<TextView
android:id="@+id/video_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FFFFFF"
android:layout_centerHorizontal="true"
android:layout_marginTop="112dp" />
<VideoView
android:id="@+id/video_videocontainer"
android:layout_width="480dp"
android:layout_height="360dp"
android:layout_below="@id/video_title"
android:layout_marginTop="10dp"
android:layout_centerHorizontal="true" />
</RelativeLayout>
है मैं इस कोड
player = (VideoPlayer) findViewById(R.id.video_videocontainer);
player.setVideoURI(videoUri);
कोड काम करता है का उपयोग करते हुए वीडियो लोड, लेकिन जब videoView फ्रेम के अंदर सही ढंग से है, वीडियो में ही कहीं निभाता है स्क्रीन के शीर्ष, और इसका केवल एक हिस्सा VideoView में दिखाया गया है।
here (यह डीबगिंग के लिए केवल एक अस्थायी वीडियो है) का उदाहरण है। उसी पल में वीडियो का स्क्रीनशॉट here।
जैसा कि आप देख सकते हैं, वीडियो व्यू केवल वीडियो का हिस्सा दिखाता है, बाकी को काले रंग से भरता है।
मुझे पूरा यकीन है कि मुझे कुछ सचमुच सरल याद आ रहा है, लेकिन मैं यह बिल्कुल नहीं समझ सकता।
अग्रिम धन्यवाद।
संपादित करें: मैं एक VideoPlayer वर्ग कि VideoView प्रदान करता है और इस
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
setMeasuredDimension(480, 360);
}
public void changeVideoSize()
{
getHolder().setFixedSize(480, 360);
requestLayout();
invalidate();
}
तरह onMeasure ओवरराइड करता है लेखन की कोशिश की है लेकिन यह एक बिट में मदद नहीं करता।
संपादित करें 2: एक सतह दृश्य और मीडियाप्लेयर के साथ प्रयास किया, वही परिणाम। मुझे लगता है कि मुझे एंड्रॉइड पर एक वीडियो चलाने के सिद्धांत को समझ में नहीं आया है। यहां काफी अटक गया है।
संपादित 3: मैंने सैमसंग गैलेक्सी एचडी पर कोशिश की है और वीडियो फ्रेम के अंदर सही ढंग से दिखाता है। मुझे आश्चर्य है कि क्या यह टैबलेट के साथ समस्या है, या 2.2 के साथ?
संपादित करें 4: 2.2 के तहत चल रहे एवीडी वीडियो को उचित रूप से प्रस्तुत नहीं करता है। एवीडी चल रहा 4.1 करता है। मुझे लगता है कि यह एक टैड नीचे narrows।
मैं फिर से लिखा है सब कुछ कहा जाता है और अब मैं वास्तव में कुछ अजीब का सामना करना पड़ रहा है। वीडियो VideoView के साथ, SurfaceView के बाहर खेलता है। केवल यह फसल नहीं है, और सब कुछ के शीर्ष पर दिखाता है। यहां तक कि जब मैं 'setDisplay (null)' का उपयोग करता हूं, तब भी वीडियो दिखाता है! –
क्या आपने सतह धारक कॉलबैक लागू किया है और इसके लिए घटनाओं को जोड़ा है? – petrumo
मैं आपके नेतृत्व का पालन करने के बाद वीडियो को थोड़ा बेहतर स्थिति में रखने में कामयाब रहा। यह इष्टतम नहीं है और मैं अभी भी विश्वास नहीं कर सकता कि एक वीडियो को एक दृश्य के अंदर रखना मुश्किल है, लेकिन यह अभी काम करता है। धन्यवाद! –