24

アプリで mediacontroller を使用していますが、3 秒間しか表示されません。私はたくさん検索しましたが、すべてのドキュメントで show 関数のみが表示され、タイムアウトが設定されていますが、効果はありません。メディアコントローラーを常に表示するにはどうすればよいですか?

テストshow(0)しましたが、効果はありませんでした。

4

10 に答える 10

27

MediaController クラスを拡張し、そのインスタンスをプログラムで VideoView クラスに設定できます。

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

public class MyMediaController extends MediaController {
    public MyMediaController(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public MyMediaController(Context context, boolean useFastForward) {
        super(context, useFastForward);
    }

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

    @Override
    public void show(int timeout) {
        super.show(0);
    }

}

使用法は次のとおりです。

VideoView myVideoView = (VideoView) findViewById(R.id.my_video_view);
MediaController mc = new MyMediaController(myVideoView.getContext());
mc.setMediaPlayer(myVideoView);
myVideoView.setMediaController(mc);
于 2011-12-07T02:57:42.547 に答える
13

匿名クラスをインラインで作成し、特定のメソッドをオーバーライドできます。hide メソッドをオーバーライドし、そこで何もしない必要があります。また、戻るキーの押下をチェックして super.hide() を呼び出すために、dispatchKeyEvent メソッドをオーバーライドする必要があります。そうしないと、バックプレスでコントローラーが非表示になり、アクティビティを閉じることができません。

 mediaController = new MediaController(this){
        @Override
        public void hide() {
            // TODO Auto-generated method stub
            //do nothing
        }

        @Override
        public boolean dispatchKeyEvent(KeyEvent event) {

            if(event.getKeyCode() == KeyEvent.KEYCODE_BACK) {

                if (mediaPlayer != null) {
                    mediaPlayer.reset();
                    mediaPlayer.release();
                    mediaPlayer = null;
                }
                super.hide();
                Activity a = (Activity)getContext();
                a.finish();

            }
        return true;
        }
    };
于 2014-01-19T11:21:08.120 に答える
11

まったく新しいクラスを作成する代わりに、匿名クラスをインラインで作成し、そこで hide メソッドをオーバーライドすることもできます。

mediaController = new MediaController(this) {
    @Override
    public void hide() {
    //Do not hide.
    }
};
于 2013-10-24T19:37:25.140 に答える
11

次の方法で show メソッドを試してください。

new media controller().show(50000);

また、 http://developer.android.com/reference/android/widget/MediaController.html#show()も確認してください。

SudeepSR: show(0) を呼び出すと、hide() が呼び出されるまでメディア コントローラーが表示されることに注意してください。

于 2010-12-16T08:20:00.637 に答える
6

必要なことは、カスタム コントローラーで hide メソッドをオーバーライドし、何もしないことです。

public class MyMediaController extends MediaController {
..
@Override
    public void hide() {
        // Do nothing here in order to always show

    }
...
}

PS: メディア コントローラーを表示するには、ビデオをクリックする必要があります。

于 2012-07-30T05:08:12.903 に答える
5

できる限りのことを試した後、次のコードがうまくいきました!

    mVideoView = (VideoView) findViewById(R.id.video);

    mMediaController = new MediaController(this) {
        //for not hiding
        @Override
        public void hide() {}

        //for 'back' key action
        @Override
        public boolean dispatchKeyEvent(KeyEvent event) {
            if(event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
                Activity a = (Activity)getContext();
                a.finish();
            }
            return true;
        }
    };

    mMediaController.setAnchorView(mVideoView);
    mMediaController.setMediaPlayer(mVideoView);
    mVideoView.setMediaController(mMediaController);
    mMediaController.requestFocus();

    //only this showed the controller for me!!
    mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
        @Override
        public void onPrepared(MediaPlayer mp) {
            mVideoView.start();
            mMediaController.show(900000000);
        }
    });

    //finish after playing
    mVideoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
        @Override
        public void onCompletion(MediaPlayer mediaPlayer) {
            finish();
        }
    });
于 2014-08-21T19:28:04.870 に答える
2

これを試して:

videoView.setOnCompletionListener(onVideoCompleted);
videoView.setOnPreparedListener(onVideoPrepared);

mc.setAnchorView(videoView);
mc.setMediaPlayer(videoView);

MediaController mc = new MediaController(this);
videoView.setMediaController(mc);

MediaPlayer.OnPreparedListener onVideoPrepared = new MediaPlayer.OnPreparedListener() {
    @Override
    public void onPrepared(MediaPlayer mp) {
        mc.show(0);
    }
};

MediaPlayer.OnCompletionListener onVideoCompleted = new MediaPlayer.OnCompletionListener() {
    @Override
    public void onCompletion(MediaPlayer mp) {
        mc.hide();
    }
};
于 2015-08-20T02:27:16.043 に答える