android - 当我按下后退按钮时关闭 VideoView 中的视频

标签 android video gridview android-videoview

当我按下后退按钮并且正在播放视频时,我想关闭一个 VideoView。

这是我的代码:

public class MainActivity extends AppCompatActivity {

    public Integer[] mVideo = {
            R.raw.clesella, R.raw.simonino,
            R.raw.ennio, R.raw.zip,
            R.raw.pippo, R.raw.monituri
    };

    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final GridView gridview = (GridView) findViewById(R.id.gridview);
        gridview.setAdapter(new VideoAdapter(this));

        gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
               final VideoView mVideoView2 = (VideoView) findViewById(R.id.video);
                String uriPath = "android.resource://"+ getPackageName()+"/"+mVideo[position];
                Uri uri2 = Uri.parse(uriPath);
                mVideoView2.setVideoURI(uri2);
                mVideoView2.requestFocus();
                mVideoView2.setVisibility(view.VISIBLE);
                gridview.setVisibility(view.GONE);

                mVideoView2.start();

                mVideoView2.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {

                    @Override
                    public void onCompletion(MediaPlayer mp) {
                        // TODO Auto-generated method stub

                        //write your code after complete video play
                        mVideoView2.setVisibility(View.GONE);
                        gridview.setVisibility(View.VISIBLE);
                    }
                });

                mVideoView2.setOnTouchListener(new View.OnTouchListener() {
                    @Override
                    public boolean onTouch(View v, MotionEvent motionEvent) {
                        if (mVideoView2.isPlaying()) {
                            mVideoView2.pause();
                        return  false;
                        }
                        else {
                            mVideoView2.start();
                            return false;
                        }
                    }
                });

            }
        });
    }
}

如您所见,我从原始文件夹中获取视频并填充到 GridView 中。当我点击该项目时,视频开始播放。我想让 VideoView GONE 和 GridView 可见,就像我在 setOnCompletetionListener 中所做的那样,但是当视频正在播放并且我按下后退按钮时。

最佳答案

如图所示,使您的 mVideoView2gridview 成为您的类(class)的全局对象,并且您不会创建匿名的 new MediaPlayer.OnCompletionListener()每次点击,只需创建一个全局监听器并应用它。

class XY extends ..{
    GridView gridview;
    VideoView mVideoView2 


    @Override
    protected void onCreate(final Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);

       gridview = (GridView) findViewById(R.id.gridview);
       gridview.setAdapter(new VideoAdapter(this));
       mVideoView2 = (VideoView) findViewById(R.id.video);
        mVideoView2.setOnCompletionListener(listner);

       gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
           @Override
           public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
          // other code to play and listen
           }
    }

    @Override
    public void onBackPressed() {
        if(videoView.isPlaying()){ // check if video is playing then hide views
            mVideoView2.setVisibility(View.GONE);
            gridview.setVisibility(View.VISIBLE);
          }else{  
               super.onBackPressed();
          }
      }

      MediaPlayer.OnCompletionListener listner = 
                        new new MediaPlayer.OnCompletionListener(){
      //... add the code here 
     } 
}

关于android - 当我按下后退按钮时关闭 VideoView 中的视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40766627/

相关文章:

user-interface - 如何让我的 gridView 滚动占据 Flutter 中的整个页面?

java - 使用多个dex文件时是否需要将同一个包的类保存在同一个dex中

具有可嵌入上传控件的视频共享站点

gridview - 从 DataProvider 值 yii2 设置页面标题

asp.net - Gridview ControlState 非常大,即使禁用 View 状态并且不使用 DataKeyNames

Android VideoView 无法播放

android - 有什么办法可以监听相机加载时的声音吗? CWAC相机

Android 通过移动网络强制 OkHttp 请求

android - AppBarLayout 禁用选定 View 上的拖动

windows - FFMPEG(windows7)无法让输出视频显示超过 10 个 jpg 中的 3 个