有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在安卓中播放一个又一个视频。我的代码在下面

这段代码显示我的原始文件中有两个视频,我希望在第一个视频自动完成后播放第二个视频

 VideoView videoView = (VideoView) findViewById(R.id.videoView);
        videoView.start();

        videoView.setVideoPath("安卓.resource://" + getPackageName() + "/"+R.raw.badweather);

        MediaController mc = new MediaController(this);

        mc.setAnchorView(videoView);

        videoView.setMediaController(mc);
        i=1;




        VideoView videoView2 = (VideoView) findViewById(R.id.videoView2);
        videoView2.start();

        videoView2.setVideoPath("安卓.resource://" + getPackageName() + "/" + R.raw.rain);

        MediaController mc2 = new MediaController(this);

        mc2.setAnchorView(videoView2);

        videoView2.setMediaController(mc2);

共 (1) 个答案

  1. # 1 楼答案

    以下是我的建议。此响应的开头假设您实际上更喜欢使用单个VideoView。如果情况并非如此,请参见最后的注释

    为视频制作一个资源URI队列。比如:

    // "list" is fine for this
    List<String> videoUris = new ArrayList<>();
    

    现在,编写一个播放视频的代码:

    public void playVideo(final String videoUri) {
        // hook up to video view, etc.
    }
    

    从这里,你可能有两个选择:

    从完成回调

    一种方法是监听视频完成回调,然后执行以下操作:

    public void onVideoCompletedCallback(final String completedVideoUri) {
        if (!videoUris.isEmpty()) {
            playVideo(videoUris.remove(0));
        }
    }
    

    从后台线程

    或者,如果将playVideo()实现为阻塞,则可能会运行一个线程来循环它们

    new Thread() {
        @Override
        public void run() {
            while (!videoUris.isEmpty()) {
                // assume playVideo() blocks until the video
                // is done playing.
                playVideo(videoUris.remove(0));
            }
        }
    }.start();
    

    在这两种情况下,我只提出了一些可行的方法。在Android上,将它们转换为特定的平台绑定仍有一些工作要做

    但是如果你仍然完全迷路了,从^{}开始,这可能是我上面所说的回调的一个大致替代品

    在Android O上,使用内置队列

    事实上,由于我刚刚调出了那个doco,看起来MediaController实际上已经支持Android O预览版的队列。所以,第三种选择,在Android O上:使用^{}。但显然,从2017年4月起,几乎没有人会在这里使用Android O Previous,因此选项3更具学术性而非实用性

    使用k-many视频视图

    如果您确实需要并且想要这样做,那么调整上面的代码以使用SortedMap。地图将从资源uri到视图id。换句话说,从uri到视频源,再到视频视图的android id,在其中播放它。之所以选择SortedMap而不是HashMap,是因为它会将视频的顺序保留为您选择播放它们的顺序

    Map<String, Integer> videoToViewMap = new SortedMap<>();
    videoToViewMap.put("android://blah/blah/video.mp4", R.id.videoView1);
    // ... more
    

    例如,对过去是videoUris的调用中有几个是相同的isEmpty()。但是,当然,您需要编写从/map/中删除第一项的逻辑,而不是执行.remove()之类的操作