Как я могу заставить Android MediaController появляться из макета XML? - PullRequest
8 голосов
/ 19 ноября 2009

Я создал файл layout.xml со следующим XML, но не могу заставить MediaController появляться вообще.

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

В коде я могу получить ссылку на него из кода, вызова show () и т. Д., Но он никогда не появляется.

Я заметил в документации по android dev ( MediaController.html ), что в нем говорится: «Способ использовать этот класс - создать его программно.» нужно делать что-то по-другому, например, не делать то, что я делаю. :)

Я МОГУ заставить его появляться, если я делаю это программно, но мне нужно, чтобы он всегда появлялся на экране. Я просто тупой, или это не значит, что меня раздувают с помощью XML?

Ответы [ 7 ]

16 голосов
/ 19 ноября 2009

С этот пример проекта :

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

Затем он появится, когда вы нажмете на экран к нижнему краю вашего VideoView.

С точки зрения постоянного отображения на экране ... Я не знаю, возможно ли это. Вы всегда можете создать свой собственный контроллер - вот пример проекта , который создает собственный всплывающий полупрозрачный контроллер. Это на самом деле не так уж сложно, и вы получаете полный контроль над всем, включая организацию постоянного отображения на экране.

9 голосов
/ 28 августа 2011

Вы можете запретить MediaController скрывать расширение MediaController и переопределить hide (), чтобы ничего не делать. например:

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
    }
}
2 голосов
/ 17 января 2013

Вы можете раздувать медиа-контроллер из макета XML. Также после получения ссылки на него можно установить видеовид в качестве якоря.

  • Но это вызовет сбой, как только вы попытаетесь коснуться MediaController (я пытаюсь выяснить, почему это происходит).

Также в этом mediaController будет отображаться всегда.

<?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>

В деятельности,

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();
            }
        });
    }
}
2 голосов
/ 11 января 2010

При использовании show (0) медиа-контроллер будет отображаться до тех пор, пока hide () не будет вызван взаимодействием с проигрывателем. Я, к сожалению, пока не нашел способа предотвратить hide (); - (

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);

Дождитесь закрытия экрана, чтобы избежать ошибки в Android (1,5 секунды здесь)

0 голосов
/ 10 декабря 2013

Я думаю, что это ваш раздел "mVideoView.setVideoURI". Недавно я работал над подобной вещью, включая эту, и кажется, что видео должно быть получено через сервер. Вам нужно будет сохранить свои видео на сервере, а затем позвонить сюда. Это то, что случилось со мной в любом случае.

0 голосов
/ 25 апреля 2012

При объявлении моего MediaController в файле макета, получении указателя на него в коде (с помощью метода Activity.findViewById(int id)) и присоединении его к моему VideoView (с помощью метода VideoView.setMediaController(MediaController controller)), я считаю, что он ведет себя нежелательно (принудительное закрытие приложение) время от времени. Вместо этого я создаю его в коде, присоединяю его к VideoView и затем указываю, где он должен отображаться в Activity, используя метод VideoView.setAnchorView(View view) следующим образом:

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();
0 голосов
/ 19 ноября 2009

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

Этот документ предполагает, что вам может потребоваться расширить контроллер, чтобы получить поведение, которое вам нужно.

Вы могли бы также показать это в течение очень долгого времени, я полагаю;)

В настоящее время я изо всех сил пытаюсь заставить контроллер показать, затем я нажимаю кнопку: \

(также интересно, как быстро Google добавил этот вопрос в результаты поиска)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...