MediaController总是在Android上显示

Byt*_*ode 22 android mediacontroller

我在我的应用程序中使用mediacontroller,但它只显示3秒钟.我搜索了很多,但在每个文档中我只看到show函数,设置超时,但它没有效果.我怎么能一直展示mediacontroller?

我测试过show(0),但没有效果.

pct*_*ing 25

您可以扩展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);
    }

}
Run Code Online (Sandbox Code Playgroud)

这是用法:

VideoView myVideoView = (VideoView) findViewById(R.id.my_video_view);
MediaController mc = new MyMediaController(myVideoView.getContext());
mc.setMediaPlayer(myVideoView);
myVideoView.setMediaController(mc);
Run Code Online (Sandbox Code Playgroud)


小智 13

您可以创建内联匿名类并覆盖某些方法.您需要覆盖hide方法并在那里不执行任何操作.您还需要覆盖dispatchKeyEvent方法以检查后退按键并调用super.hide().否则在背面按下控制器不会隐藏,活动无法关闭.

 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;
        }
    };
Run Code Online (Sandbox Code Playgroud)


San*_*esh 11

以这种方式尝试show方法:

new media controller().show(50000);
Run Code Online (Sandbox Code Playgroud)

并查看http://developer.android.com/reference/android/widget/MediaController.html#show().

SudeepSR:请注意,如果你调用show(0),它将显示媒体控制器,直到调用hide().


Ger*_*ard 9

您还可以创建内联的匿名类并覆盖其中的hide方法,而不必为其创建一个全新的类:

mediaController = new MediaController(this) {
    @Override
    public void hide() {
    //Do not hide.
    }
};
Run Code Online (Sandbox Code Playgroud)

  • 为什么选择downvote?在downvoting时解释是很常见的礼貌 (4认同)

Neo*_*Neo 6

你需要做的是,覆盖自定义控制器中的hide方法,什么都不做.

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

    }
...
}
Run Code Online (Sandbox Code Playgroud)

PS:你仍然需要点击视频来显示媒体控制器.


RRK*_*RRK 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();
        }
    });
Run Code Online (Sandbox Code Playgroud)