Ano*_*n G 10 android back-button mediacontroller android-videoview
在VideoView中播放视频时,Android后退按钮无效.但它在播放视频之前有效.我正在为VideoView使用自定义MediaController.
我尝试使用dispatchKeyEvent,它无法正常工作.
使用VideoView的活动代码:
mc = new CustomMediaController(mVideo.getContext(), screenIcon) {
@Override
public void hide(){
}
@Override
public boolean dispatchKeyEvent(KeyEvent event){
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
super.hide();
((Activity) getContext()).finish();
return true;
}
return super.dispatchKeyEvent(event);
}
};
Run Code Online (Sandbox Code Playgroud)
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK)) {
onBackPressed();
finish();
}
return true;
}
@Override
public void onBackPressed() {
super.onBackPressed();
finish();
}
Run Code Online (Sandbox Code Playgroud)
CustomMediaController还包含dispatchKeyEvent:
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
((Activity) getContext()).finish();
}
return super.dispatchKeyEvent(event);
}
Run Code Online (Sandbox Code Playgroud)
此外,当我滚动布局时,mediaController没有保持其在videoView中的位置.为了解决这个错误,我添加了一个代码来修复mediaController的位置.
FrameLayout f;
RelativeLayout.LayoutParams lp;
RelativeLayout.LayoutParams params;
params = (RelativeLayout.LayoutParams) mVideo.getLayoutParams();
params.height = mp.getVideoHeight();
progress.dismiss();
f = (FrameLayout) mc.getParent();
lp = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
lp.addRule(RelativeLayout.ALIGN_BOTTOM, mVideo.getId());
try {
((LinearLayout) f.getParent()).removeView(f);
} catch (Exception e) {
((RelativeLayout) f.getParent()).removeView(f);
}
((RelativeLayout) mVideo.getParent()).addView(f, lp);
//mc.setAnchorView(mVideo);
mVideo.setLayoutParams(params);
Run Code Online (Sandbox Code Playgroud)
当我删除上面的代码时,后退按钮工作正常.
我在堆栈溢出中经历了以下问题,但没有解决我的问题.
Stack Overflow链接我尝试过:当VideoView正在播放视频时,
Android后退按钮和MediaController
后退按钮将无法正常工作播放视频
时没有捕获到第一步后退按钮按下VideoView中的后退按钮
问题
在我的媒体控制器中覆盖dispatchKeyEvent()后,它工作正常
mediaController=new MediaController(this){
@Override
public void hide() {
mediaController.show();
}
@Override
public boolean dispatchKeyEvent(KeyEvent event){
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
super.hide();
((Activity) getContext()).finish();
return true;
}
return super.dispatchKeyEvent(event);
}
};
videoView.setMediaController(mediaController);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1045 次 |
| 最近记录: |