android.media.action,MediaController总是在Android上显示

回答(10)

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

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

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

您可以创建内联匿名类并覆盖某些方法 . 您需要覆盖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;

}

};

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

以这种方式尝试show方法:

new media controller().show(50000);

SudeepSR: Please make a note of that, if you called show(0), it will show the Media Controller until hide() is called.

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

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

mediaController = new MediaController(this) {

@Override

public void hide() {

//Do not hide.

}

};

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

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

public class MyMediaController extends MediaController {

..

@Override

public void hide() {

// Do Nothing to keep the show the controller all times

}

...

}

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

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

在尽我所能之后,以下代码对我有用!

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

}

});

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

这可能是一个旧线程,但仍然没有答案,试试这个:

final MediaController mediaController = new MediaController(this);

mediaController.setAlwaysDrawnWithCacheEnabled(true);

mediaController.setAnchorView(vView);

mediaController.requestFocus();

vView.setOnPreparedListener( new OnPreparedListener() {

@Override

public void onPrepared(MediaPlayer mp) {

mediaController.show( 0 );

}

});

vView.setVideoPath(Preview_Path);

vView.setMediaController(mediaController);

vView.start();

在MediaController类“show”方法中有一条注释

**Use 0 to show

* the controller until hide() is called**

所以使用900000或更大的 Value 将无济于事 . 希望它能帮助你 .

干杯 .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

试试这个:

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

}

};

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

我想淡化控制器的视频,并始终显示音频 . 这很有效

mController = new MediaController(this) {

@Override

public void hide() {

if (mType != TYPE_AUDIO) super.hide();

}

@Override

public boolean dispatchKeyEvent(KeyEvent event) {

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

mController.hide();

Activity a = (Activity)getContext();

a.finish();

return true;

}

return false;

}

};

在MediaPlayer.onPrepared中,我添加了:

if (mType == TYPE_AUDIO) mController.show(0);

这会导致控制器在音频播放开始时显示,而不是视频播放 .

其他电话控制按钮继续正常工作 .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

简单!在事件隐藏中设置可见性“GONE”并在show中设置可见性“VISIBLE”!

MediaController mc= new MediaController(zoom.this){

@Override

public void setMediaPlayer(MediaPlayerControl player) {

super.setMediaPlayer(player);

this.show(4000);

}

@Override

public void show(int timeout) {

super.show(timeout);

this.setVisibility(View.VISIBLE);

}

//instead of press twice with press once "back" button to back

@Override

public boolean dispatchKeyEvent(KeyEvent event) {

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

Activity a = (Activity)getContext();

a.finish();

}

return true;

}

@Override

public void hide() {

// TODO Auto-generated method stub

super.hide();

this.setVisibility(View.GONE);

//super.show(3000);

}

};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值