Android: скрытие функций медиа-контроллера - PullRequest
2 голосов
/ 13 июля 2011

У меня есть видеовид, и когда видео начинается, медиа-контроллер показывается в течение 3 секунд. Я хочу скрыть медиа-контроллер, если я не коснусь экрана. Я пытался

MediaController mc= new MediaController();
mc.hide();
Videoview.setMediaController(mc);
..
..
..

Но это не сработало. Любые предложения, пожалуйста?

Ответы [ 3 ]

5 голосов
/ 05 октября 2011

На самом деле это не решение для сокрытия MediaController, но если вы хотите полностью избавиться от этого, сделайте следующее:

videoView.setMediaController(null);

Вы можете сначала скрыть его, выполнив вышеописанное,и затем, когда вы хотите, чтобы он отображался (onClick или onTouch или что-то еще), просто создайте новый MediaController и установите его на видеопоказ.Я добавил логическое значение, чтобы действие не происходило более одного раза.

@Override
public boolean onTouchEvent(MotionEvent ev) {
    if (ev.getAction() == MotionEvent.ACTION_DOWN) {
        if (controllerCreated == false) {
            videoView.setMediaController(mc);
            mc.show();
            controllerCreated = true;
        }
        return true;
    } else {
        return false;
    }
}
1 голос
/ 07 января 2013

Указывать videoView.setMediaController(null) необязательно.

Проблема в том, что вы не можете скрыть контроллер, пока он не будет полностью подготовлен.

Используйте OnPreparedListener и в обратном вызове onPrepared скрывайте неправильно, как:

@Override
public void onPrepared (MediaPlayer mp) 
{
    int childs = mediaController.getChildCount();
    for (int i = 0; i < childs; i++)
    {
        View child = mediaController.getChildAt (i);
        child.setVisibility (View.GONE);
    }
}
0 голосов
/ 25 января 2016

К сожалению, это жестко запрограммированное поведение в VideoView:

...
if (mTargetState == STATE_PLAYING) {
    start();
    if (mMediaController != null) {
        mMediaController.show();
    }
...

В качестве обходного пути, оберните MediaController в вашем собственном классе и подавьте начальный вызов show(), например:

package pkg.your;

import android.content.Context;
import android.widget.MediaController;

public class MyMediaController extends MediaController {

    private boolean suppressed = true;

    public MyMediaController(Context context) {
        super(context);
    }

    @Override
    public void show(int timeout) {
        if (! suppressed) {
            super.show(timeout);
        }
        suppressed = false;
    }
}

Затем просто подключите MyMediaController выше, как обычно, например:

MyMediaController mc = mediaController = new MyMediaController(this);
mc.setAnchorView(videoView);
mc.setMediaPlayer(videoView);
videoView.setMediaController(mc);
....

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

...