Google vr sdk的使用

效果图



导入sdk前先修改相应参数



引入

依赖


VRPlayActivity

public class VrActivity extends Activity{
   
@InjectView(R.id.video_view)
    VrVideoView
videoView;
   
@InjectView(R.id.seek_bar)
    SeekBar
seekBar;
    private static final
String STATE_PROGRESS_TIME = "progressTime";
    private static final
String STATE_IS_PAUSED = "isPaused";
    private static final
String STATE_VIDEO_DURATION = "videoDuration";
    private int
loadVideoStatus = LOAD_VIDEO_STATUS_UNKNOWN;
    public static final int
LOAD_VIDEO_STATUS_UNKNOWN = 0;
    public static final int
LOAD_VIDEO_STATUS_SUCCESS = 1;
    public static final int
LOAD_VIDEO_STATUS_ERROR = 2;
    private boolean
isPaused = false;
    private
VideoLoaderTask backgroundVideoLoaderTask;
    private
VrVideoView.Options videoOptions = new VrVideoView.Options();
    private
Uri fileUri;

   
@Override
   
protected void onCreate(BundlesavedInstanceState) {
       
super.onCreate(savedInstanceState);
       
setContentView(R.layout.vr_activity);
       
ButterKnife.inject(this);
       
seekBar.setOnSeekBarChangeListener(new SeekBarListener());
       
videoView.setEventListener(new ActivityEventListener());
       
loadVideoStatus = LOAD_VIDEO_STATUS_UNKNOWN;
       
handleIntent(getIntent());
   
}

   
private class ActivityEventListener extendsVrVideoEventListener {

       
@Override
       
public void onLoadSuccess() {
           
seekBar.setMax((int) videoView.getDuration());
       
}

       
@Override
       
public void onClick() {
            togglePause()
;
       
}

       
@Override
       
public void onNewFrame() {
            
seekBar.setProgress((int) videoView.getCurrentPosition());
       
}

    }

   
@Override
   
public void onRestoreInstanceState(BundlesavedInstanceState) {
       
super.onRestoreInstanceState(savedInstanceState);

        long
progressTime = savedInstanceState.getLong(STATE_PROGRESS_TIME);
       
videoView.seekTo(progressTime);
       
seekBar.setMax((int) savedInstanceState.getLong(STATE_VIDEO_DURATION));
       
seekBar.setProgress((int) progressTime);

       
isPaused = savedInstanceState.getBoolean(STATE_IS_PAUSED);
        if
(isPaused) {
           
videoView.pauseVideo();
       
}
    }

   
private class SeekBarListener implementsSeekBar.OnSeekBarChangeListener {
       
@Override
       
public void onProgressChanged(SeekBarseekBar, int progress, boolean fromUser){
           
if (fromUser){
               
videoView.seekTo(progress);
           
} // elsethis was from the ActivityEventHandler.onNewFrame()'s seekBar.setProgressupdate.
       
}

       
@Override
       
public void onStartTrackingTouch(SeekBarseekBar) {
        }

       
@Override
       
public void onStopTrackingTouch(SeekBarseekBar) {
        }
    }

   
private void handleIntent(Intent intent){
       
if (Intent.ACTION_VIEW.equals(intent.getAction())) {

           
fileUri =intent.getData();
            if
(fileUri== null) {
                Log.w(
"TAG", "Nodata uri specified. Use \"-d /path/filename\".");
           
} else{
                Log.i(
"TAG", "Usingfile " + fileUri.toString());
           
}

           
videoOptions.inputFormat = intent.getIntExtra("inputFormat", VrVideoView.Options.FORMAT_DEFAULT);
           
videoOptions.inputType = intent.getIntExtra("inputType", VrVideoView.Options.TYPE_MONO);
       
} else{
            Log.i(
"TAG", "Intentis not ACTION_VIEW. Using the default video.");
           
fileUri = null;
       
}
       
if (backgroundVideoLoaderTask != null) {
           
// Cancel any task from a previous intent sent to thisactivity.
            
backgroundVideoLoaderTask.cancel(true);
       
}
       
backgroundVideoLoaderTask = new VideoLoaderTask();
       
backgroundVideoLoaderTask.execute(Pair.create(fileUri, videoOptions));
   
}

   
@Override
   
protected void onPause() {
       
super.onPause();
       
videoView.pauseRendering();
       
isPaused = true;
   
}

   
@Override
   
protected void onResume() {
       
super.onResume();
       
videoView.resumeRendering();
   
}

   
@Override
   
protected void onDestroy() {
       
videoView.shutdown();
        super
.onDestroy();
   
}

   
private void togglePause() {
       
if (isPaused) {
           
videoView.playVideo();
       
} else{
           
videoView.pauseVideo();
       
}
       
isPaused = !isPaused;
   
}

   
class VideoLoaderTaskextends AsyncTask<Pair<Uri, VrVideoView.Options>, Void, Boolean> {
       
@Override
       
protected BooleandoInBackground(Pair<Uri, VrVideoView.Options>...fileInformation) {

           
// No intent was specified, so we default to playing thelocal stereo-over-under video.
           
final VrVideoView.Optionsoptions = new VrVideoView.Options();
           
/**设置视频的播放焦点*/
           
options.inputType =VrVideoView.Options.TYPE_MONO;
           
Intent intent = getIntent();
            final
String uri = intent.getStringExtra("uri");
           
Log.i("TAG", uri + "uri");
            if
(uri != null) {
                runOnUiThread(
new Runnable() {
                   
@Override
                   
public void run() {
                       
try {
                           
videoView.loadVideo(Uri.parse(uri), options);
                       
} catch (IOException e) {
                           e.printStackTrace()
;
                       
}
                    }
                })
;

//                   videoView.loadVideoFromAsset("congo.mp4", options);
           
}


           
return true;
       
}
    }

 xml布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
   
android:orientation="vertical" android:layout_width="match_parent"
   
android:layout_height="match_parent">
   <com.google.vr.sdk.widgets.video.VrVideoView
       
android:id="@+id/video_view"
       
android:layout_width="match_parent"
       
android:layout_height="250dip"/>

   
<!-- Seeking UI & progress indicator.-->
   
<SeekBar
       
android:id="@+id/seek_bar"
       
style="?android:attr/progressBarStyleHorizontal"
       
android:layout_height="32dp"
       
android:layout_width="match_parent"
       
/>
</LinearLayout>



  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值