使用 videoview 单击或触摸默认 Mediacontroller 的搜索栏时,如何向用户显示警报消息?
How to show an Alert message to user when clicks or touches the seekbar of default Mediacontroller with videoview?
我使用 Mediacontroller 实现了 VideoView,如下所示。
MediaController mediacontroller = new MediaController(VideoViewActivity.this);
mediacontroller.setAnchorView(mVideoView);
mVideoView.setMediaController(mediacontroller);
现在我想在用户点击搜索栏时显示一个警告。
我尝试通过将 onclickListener
添加到搜索栏来使用以下代码,但没有用。
int topContainerId = getResources().getIdentifier("mediacontroller_progress", "id", "android");
SeekBar seekbar = (SeekBar) mediacontroller.findViewById(topContainerId);
seekbar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.i(TAG, "WE HAVE LIFT OFF");
showAlertMesage();
}
});
但事件未触发,因此带有“确定”和“取消”选项的警报消息未显示。
当用户 clicks/touches 在用户单击 'OK' 之前 seekbar.The 搜索栏不需要可搜索时,实施还应显示警报。
如果用户点击'Cancel' 视频播放和搜索位置不应改变。如果点击 'Ok' 它应该可以搜索到那个位置。
请分享或建议如何实现此行为,提前谢谢大家。
您需要使用onSeekChangeListener
mSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if(mMediaPlayer != null && fromUser){
Log.i(TAG, "WE HAVE LIFT OFF");
showAlertMesage();
}
}
});
你的做法是正确的。但是你需要在你的视频 prepared.Make 使用 OnPreparedListener
之后再做
mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mVideoView.start();
int topContainerId = getResources().getIdentifier("mediacontroller_progress", "id", "android");
SeekBar seekbar = (SeekBar) mediacontroller.findViewById(topContainerId);
seekbar.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
Log.i(TAG, "WE HAVE LIFT OFF");
if(seekAllowed){ //declare seekAllowed as false globally
return false;
}
webView1.pause();
showAlertMesage();
return true;
}
});
}
});
对话:
private void showAlertMesage() {
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
alertDialogBuilder.setPositiveButton("Ok",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
seekAllowed = true;
webView1.resume();
}
});
alertDialogBuilder.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
webView1.resume();
}
});
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();
}
我使用 Mediacontroller 实现了 VideoView,如下所示。
MediaController mediacontroller = new MediaController(VideoViewActivity.this);
mediacontroller.setAnchorView(mVideoView);
mVideoView.setMediaController(mediacontroller);
现在我想在用户点击搜索栏时显示一个警告。
我尝试通过将 onclickListener
添加到搜索栏来使用以下代码,但没有用。
int topContainerId = getResources().getIdentifier("mediacontroller_progress", "id", "android");
SeekBar seekbar = (SeekBar) mediacontroller.findViewById(topContainerId);
seekbar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.i(TAG, "WE HAVE LIFT OFF");
showAlertMesage();
}
});
但事件未触发,因此带有“确定”和“取消”选项的警报消息未显示。
当用户 clicks/touches 在用户单击 'OK' 之前 seekbar.The 搜索栏不需要可搜索时,实施还应显示警报。
如果用户点击'Cancel' 视频播放和搜索位置不应改变。如果点击 'Ok' 它应该可以搜索到那个位置。
请分享或建议如何实现此行为,提前谢谢大家。
您需要使用onSeekChangeListener
mSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if(mMediaPlayer != null && fromUser){
Log.i(TAG, "WE HAVE LIFT OFF");
showAlertMesage();
}
}
});
你的做法是正确的。但是你需要在你的视频 prepared.Make 使用 OnPreparedListener
mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mVideoView.start();
int topContainerId = getResources().getIdentifier("mediacontroller_progress", "id", "android");
SeekBar seekbar = (SeekBar) mediacontroller.findViewById(topContainerId);
seekbar.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
Log.i(TAG, "WE HAVE LIFT OFF");
if(seekAllowed){ //declare seekAllowed as false globally
return false;
}
webView1.pause();
showAlertMesage();
return true;
}
});
}
});
对话:
private void showAlertMesage() {
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
alertDialogBuilder.setPositiveButton("Ok",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
seekAllowed = true;
webView1.resume();
}
});
alertDialogBuilder.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
webView1.resume();
}
});
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();
}