使用 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();
    }