2009-11-18 11 views
8

He creado un archivo layout.xml con el siguiente XML, pero no puedo hacer que aparezca MediaController.¿Cómo puedo obtener un Android MediaController para que aparezca desde el diseño xml?

<MediaController android:id="@+id/media_controller" 
    android:layout_width="fill_parent" 
    android:layout_height="200px" 
    android:visibility="visible"/> 

En el código, puedo obtener una referencia de código, call show(), etc., pero nunca aparece.

He notado en la documentación de desarrollo de Android (MediaController.html) que dice: "La forma de usar esta clase es crear una instancia programática", así que tal vez soy un dufus y solo tengo que hacer algo diferente, como No hagas lo que estoy haciendo. :)

PUEDO que aparezca si lo hago programáticamente, pero necesito que siempre aparezca en la pantalla. ¿Estoy siendo estúpido, o simplemente no está destinado a ser inflado a través de XML?

Respuesta

16

de this sample project:

ctlr=new MediaController(this); 
ctlr.setMediaPlayer(video); 
video.setMediaController(ctlr); 

a continuación, aparecerá cuando se toca la pantalla t orienta el borde inferior de su VideoView.

En términos de mantenerlo en la pantalla todo el tiempo ... No sé si eso es posible. Siempre puede crear su propio controlador: here's a sample project que crea su propio controlador translúcido emergente. Realmente no es tan difícil, y usted tiene el control total de todo, incluso arreglando para que esté en pantalla todo el tiempo.

+1

ctlr.show (0) muestra el controlador hasta que se llama hide señor –

0

http://www.docstoc.com/docs/9811647/Media-on-the-Android-Platform

Este documento sugiere que puede que tenga que ampliar el controlador para obtener el comportamiento que necesita.

También podría mostrar que desde hace mucho tiempo, supongo;)

estoy actualmente luchando para conseguir incluso el controlador para mostrar a continuación, se presiona un botón: \

(también interesante la rapidez google ha añadido a esta pregunta a los resultados de búsqueda)

1

Al usar show (0) , se mostrará el controlador multimedia hasta que hide() se invoque mediante una interacción con el reproductor. Por desgracia no he encontrado ninguna manera de prevenir ocultar() todavía ;-(

MediaController mc = new MediaController(MPlayer.this); 
mc.setMediaPlayer(MPlayer.this); 
mc.setEnabled(true); 

View mMediaControllerView = (View)findViewById(R.id.media_controller); //get it from your layout 

mc.setAnchorView(mMediaControllerView); 
mMediaControllerView.setOnTouchListener(mPlayerTouchListener);//also use show() in onTouchListener 

new Handler().postDelayed(new Runnable() { 

    public void run() { 
     mc.show(0); 
    } }, 1500); 

Espere a que la pantalla de buid con el fin de evitar un fallo en Android (1,5 segundos aquí)

9

Puede evitar que el MediaController de la ocultación se extiende MediaController y esconderse de anulación() no hagan nada por ejemplo:.

class UnhideableMediaController extends MediaController 
{ 
    // override whichever contstructors you need to. 
    public UnhideableMediaController(Context context) 
    { 
     super(context); 
    } 

    // override hide to do nothing 
    public void hide() 
    { 
     // don't hide 
    } 
} 
0

al declarar mi MediaController en un archivo de diseño, para conseguir una manija en ella en el código (usando el método Activity.findViewById(int id)) y lo conecta a mi VideoView (usando el método VideoView.setMediaController(MediaController controller)), encuentra que se comporta de manera indeseable (fuerza cierra la aplicación) a veces. En su lugar, yo creo que en el código, lo sujetan al VideoView y luego especificar dónde se debe mostrar en la actividad utilizando el método VideoView.setAnchorView(View view) de la siguiente manera:

myVideoView.setVideoURI(Uri.parse(myVideoUrl)); 
myVideoView.setOnPreparedListener(new OnPreparedListener() 
{ 
    public void onPrepared(MediaPlayer mp) 
    { 
    MediaController mediaController = new MediaController(MyActivity.this); 
    videoView.setMediaController(mediaController); 

    // put the MediaController at the bottom of the Activity rather than directly beneath the VideoView 
    // (note that my Activity's layout file has root node with id 'myactivity_layoutroot') 
    if (findViewById(R.id.myactivity_layoutroot) != null) 
     mediaController.setAnchorView(findViewById(R.id.myactivity_layoutroot)); 

    videoView.requestFocus(); 
    } 
}); 
myVideoView.start(); 
2

Usted puede inflar un MediaController del xml diseño. Además, después de obtener una referencia, puede establecer una videovista como ancla.

  • Pero esto va a causar un accidente tan pronto como se intenta tocar MediaController (Estoy tratando de averiguar por qué su suceso).

También en este mediaController siempre aparecerá.

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

    <VideoView 
     android:id="@+id/mVideoView" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

    <MediaController 
     android:id="@+id/mediaController1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:focusable="false" 
     android:focusableInTouchMode="false"/> 
</RelativeLayout> 

En la actividad,

public class AnimationActivity extends Activity implements OnClickListener { 

    private MediaController mController = null; 
    private VideoView mVideoView = null; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_animation); 
     mController = (MediaController) findViewById(R.id.mediaController1); 
     mController.post(new Runnable() { 
      @Override 
      public void run() { 
       mVideoView = (VideoView) findViewById(R.id.mVideoView); 
       mVideoView.setVideoURI(Uri.parse("android.resource://" 
         + getPackageName() + "/" + R.raw.video0)); 
       mController.setAnchorView(mVideoView); 
       mVideoView.setSoundEffectsEnabled(false); 
       mVideoView.start(); 
      } 
     }); 
    } 
} 
0

creo que es su sección "mVideoView.setVideoURI". Recientemente he estado trabajando en algo similar, incluido esto, y parece que el video debe recuperarse a través del servidor. Necesitará almacenar sus videos en un servidor y luego llamarlo aquí. Eso es lo que pasó conmigo de todos modos.

Cuestiones relacionadas