2012-05-17 12 views
10

के पीछे दिखाई देता है मेरे पास एक कस्टम संवाद के अंदर VideoView है, और मैं फ्लाई पर VideoView के लिए मीडिया नियंत्रक बना रहा हूं और इसे कोड में VideoView पर असाइन कर रहा हूं, हालांकि नियंत्रक नहीं करता है वास्तव में वीडियो पर दिखाई नहीं दे रहा है - यह संवाद के पीछे दिखाई देता है! वीडियो के ऊपर नियंत्रक कैसे प्राप्त करें कोई विचार है?एंड्रॉइड - संवाद के भीतर वीडियो व्यू का मीडिया नियंत्रक संवाद

मैं कस्टम संवाद का निर्माण करने में मदद करने के लिए एक स्थिर संवाद सहायक श्रेणी का निर्माण:

public class DialogHelper { 

    public static Dialog getVideoDialog(Context context, Uri videoLocation, boolean autoplay) { 
     final Dialog dialog = getBaseDialog(context,true, R.layout.dialog_video); 

     ((Activity)context).getWindow().setFormat(PixelFormat.TRANSLUCENT); 
     final VideoView videoHolder = (VideoView) dialog.findViewById(R.id.video_view); 
     videoHolder.setVideoURI(videoLocation); 
     //videoHolder.setRotation(90); 
     MediaController mediaController = new MediaController(context); 
     videoHolder.setMediaController(mediaController); 
     mediaController.setAnchorView(videoHolder); 
     videoHolder.requestFocus(); 
     if(autoplay) { 
      videoHolder.start(); 
     } 
     videoHolder.setOnCompletionListener(new OnCompletionListener() { 

      @Override 
      public void onCompletion(MediaPlayer mp) { 
       dialog.dismiss(); 

      } 
     }); 
     return dialog; 
    } 


    /** 
    * Creates a simple dialog box with as many buttons as you want 
    * @param context The context of the dialog 
    * @param cancelable whether the dialog can be closed/cancelled by the user 
    * @param layoutResID the resource id of the layout you want within the dialog 
    * 
    * @return the dialog 
    */ 
    public static Dialog getBaseDialog(Context context, boolean cancelable, int layoutResID) { 
     Dialog dialog = new Dialog(context, R.style.Theme_PopUpDialog); 
     dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
     dialog.setCancelable(cancelable); 
     dialog.setCanceledOnTouchOutside(cancelable); 
     dialog.setContentView(layoutResID); 

     return dialog; 
    } 
} 
में

तो मेरी Activity मैं सिर्फ मेरी संवाद बनाने के लिए इस है:

Dialog videoDialog = DialogHelper.getVideoDialog(context, Uri.parse("http://commonsware.com/misc/test2.3gp"), true); 
videoDialog.show(); 

उत्तर

3

मेरा सुझाव है कि आप की जरूरत Dialog के बजाय Activity का उपयोग करने के लिए। मैनिफेस्ट में Dialog अनुकरण करने के लिए अपना Activity विषय सेट करें।

उदाहरण - AndroidManifest.xml:

android:theme="@android:style/Theme.Dialog" 

उसके बाद, आप उदाहरण में के रूप में एक VideoView प्रदर्शित करने के लिए सक्षम हो जाएगा।

2

यह XML लेआउट में मुझे

के लिए काम किया है इस तरह परिवर्तन करें,

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

    <VideoView 
     android:id="@+id/videoview" 
     android:layout_width="640dp" 
     android:layout_height="400dp" 
     android:layout_centerInParent="true" > 
    </VideoView> 

     <FrameLayout 
      android:id="@+id/videoViewWrapper" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_alignParentBottom="true" > 
     </FrameLayout> 

    </RelativeLayout> 
अपने dilog में

,

mVideoView = (VideoView) view.findViewById(R.id.videoview); 
इस में

, वीडियो दृश्य उपयोग setOnPreparedListener श्रोता और मीडिया सेट नियंत्रक,

mVideoView.setOnPreparedListener(new OnPreparedListener() { 

       @Override 
       public void onPrepared(MediaPlayer mp) { 
        // TODO Auto-generated method stub 
        mp.setOnVideoSizeChangedListener(new OnVideoSizeChangedListener() { 
         @Override 
         public void onVideoSizeChanged(MediaPlayer mp, 
           int width, int height) { 
          /* 
          * add media controller 
          */ 
          mc = new MediaController(MainActivity.this); 
          mVideoView.setMediaController(mc); 
          /* 
          * and set its position on screen 
          */ 
          mc.setAnchorView(mVideoView); 

          ((ViewGroup) mc.getParent()).removeView(mc); 

          ((FrameLayout) findViewById(R.id.videoViewWrapper)) 
            .addView(mc); 
          mc.setVisibility(View.VISIBLE); 
         } 
        }); 
        mVideoView.start(); 
       } 
      }); 
संबंधित मुद्दे