在android中播放视频的子部分

时间:2014-02-21 11:29:16

标签: android video android-videoview

在android中我有一个3分钟长的视频。我有三个按钮。 在第一个按钮点击我只想要第1分钟的视频播放。 在第二个按钮上单击从第1分钟到第2分钟视频播放 在第三个按钮上单击视频的其余部分。

点击顺序可以更改。有可能吗?

我使用了以下代码

videoPlayer = (VideoView) findViewById(R.id.videoPlayer);   
    videoPlayer.setOnPreparedListener(this);
    videoPlayer.setOnCompletionListener(this);
    videoPlayer.setKeepScreenOn(true);    
  //  videoPlayer.setVideoPath(root + "/" + pathToFile);
   // ResourceUtil.setVideo(videoPlayer,"cbse_g08_s01_l01_t01_sc11");
    videoPlayer.setVideoPath(ResourceUtil.getResourceFilePath("cbse_g08_s02_l16_t01_03a",
            MSConstants.RESOURCE_TYPE_VIDEO));


    leftButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
             Log.i("arv", "click"+"left"+videoPlayer.getDuration());
            //if(videoPlayer.canSeekBackward()())
                videoPlayer.seekTo(videoPlayer.getDuration());
            videoPlayer.start();
        }
    });

    midButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
             Log.i("arv", "click"+"mid"+videoPlayer.getCurrentPosition());
             //if(videoPlayer.canSeekForward())
                 videoPlayer.seekTo(videoPlayer.getDuration()/5);
                videoPlayer.start();
        }
    });

    rightButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
             Log.i("arv", "click"+"right");
            //if(videoPlayer.canSeekForward()) 
                videoPlayer.seekTo(videoPlayer.getDuration()/10);
            videoPlayer.start();
        }
    });

但它从给定的时间到结束播放视频。 有没有其他方法可以做到这一点。

1 个答案:

答案 0 :(得分:0)

好的,你只需创建一个Async类并在运行时处理持续时间。只要达到所需的持续时间,就完成循环并且视频暂停。在这里尝试这个代码,它具有根据您的需要暂停视频的基本功能。

private class Preview extends AsyncTask<Void,Void,Void> {       

    @Override
    protected void onPreExecute(){                  

        //handle any code if u want here
    }


    protected Void doInBackground(Void... params) {
        //leftButton,rightButton,midButton are booleans you have to make
                    if(leftButton){
                        while(videoPlayer.getCurrentPosition() < videoPlayer.getDuration()/5 )
                          Log.d("!@!@","in loop1");                 
                    }
                    if(midButton){
                        while(videoPlayer.getCurrentPosition() < videoPlayer.getDuration()/10 )
                          Log.d("!@!@","in loop2");                 
                    }
                    if(rightButton){
                        while(videoPlayer.getCurrentPosition() < videoPlayer.getDuration() )
                          Log.d("!@!@","in loop3");                 
                    }

        return null;
    }

    @Override       
    protected void onPostExecute(Void v) {
        /**Can pause or stop the videoview/mediaplayer as per your need*/

        videoPlayer.pause();  // <= this is the key ;)
    }       

}

每次按下按钮后,execute异步。

leftButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
         Log.i("arv", "click"+"left"+videoPlayer.getDuration());
        //if(videoPlayer.canSeekBackward()())
            videoPlayer.seekTo(videoPlayer.getDuration());
        videoPlayer.start();

        leftButton=true; // <= boolean to be set 
        new Preview().execute(); // <= start Async
    }
});

同样附加在其他按钮中。根据您的需要更改代码。希望能帮助到你。干杯。 :)