研究了下横竖屏切换,感觉使用沉浸模式效果还可以。
前些时候分享的XLPlayer播放器只是横屏的,就给它加入竖屏功能。
首先改AndroidManifest.xml
<activity
android:name=".SinglePlayerActivity"
android:configChanges="orientation|screenSize"
android:screenOrientation="portrait"
android:theme="@style/AppNoActionBar"/>
设置自己的style,去掉ActionBar
styles.xml
<style name="AppNoActionBar" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
更改布局,变为不是全屏
activity_single.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000000">
<RelativeLayout
android:id="@+id/main_view"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:id="@+id/portrait_player_view"
android:layout_width="match_parent"
android:layout_height="400dp">
<TextureView
android:id="@+id/m_xlsurface"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true" />
<RelativeLayout
android:id="@+id/player_view"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp">
<TextView
android:id="@+id/currentTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:text="0:0" />
<TextView
android:id="@+id/duration"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:text="0:0" />
<SeekBar
android:id="@+id/video_progress"
style="@style/Base.Widget.AppCompat.SeekBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toLeftOf="@+id/duration"
android:layout_toRightOf="@id/currentTime"
android:background="@android:color/transparent" />
</RelativeLayout>
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:layout_marginLeft="10dp">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true">
<TextView
android:id="@+id/seek_back"
android:layout_width="30dp"
android:layout_height="30dp"
android:background="@drawable/seek_back" />
<TextView
android:id="@+id/start"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_marginLeft="10dp"
android:background="@drawable/play" />
<TextView
android:id="@+id/seek_front"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_marginLeft="10dp"
android:background="@drawable/seek_front" />
<TextView
android:id="@+id/stop"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_marginLeft="10dp"
android:background="@drawable/stop" />
<TextView
android:id="@+id/setting"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_alignParentRight="true"
android:layout_marginLeft="10dp"
android:background="@drawable/setting" />
<TextView
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_alignParentRight="true"
android:layout_marginLeft="10dp"
android:background="@drawable/setting"
android:onClick="orientationChange"/>
</LinearLayout>
<TextView
android:id="@+id/enable_tracker"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_alignParentRight="true"
android:layout_marginRight="10dp"
android:background="@drawable/ic_vr_tuoluo" />
</RelativeLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/choose_vr_mode_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:background="#30ffffff"
android:orientation="vertical"
android:padding="15dp"
android:visibility="invisible"
tools:visibility="visible">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/player_nomal"
android:layout_width="30dp"
android:layout_height="30dp"
android:background="@drawable/ic_nomal_play" />
<TextView
android:id="@+id/vr_model_ball"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_marginLeft="15dp"
android:background="@drawable/ic_vr_ball" />
<TextView
android:id="@+id/vr_model_two_eye"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_marginLeft="15dp"
android:background="@drawable/ic_vr_two_eye" />
<TextView
android:id="@+id/vr_model_building"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_marginLeft="15dp"
android:background="@drawable/ic_vr_building" />
<TextView
android:id="@+id/vr_model_little_star"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_marginLeft="15dp"
android:background="@drawable/ic_vr_little_star" />
<TextView
android:id="@+id/vr_model_pic"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_marginLeft="15dp"
android:background="@drawable/ic_vr_pic" />
</LinearLayout>
<TextView
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginTop="10dp"
android:background="#666666" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp">
<TextView
android:id="@+id/clockwise"
android:layout_width="30dp"
android:layout_height="30dp"
android:background="@drawable/turn_left" />
<TextView
android:id="@+id/anti_clockwise"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_marginLeft="10dp"
android:background="@drawable/turn_right" />
</LinearLayout>
<TextView
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginTop="10dp"
android:background="#666666" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:gravity="center_vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="后台播放"
android:textColor="#333333" />
<CheckBox
android:id="@+id/back_play"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="false" />
<TextView
android:id="@+id/rate_plus"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_marginLeft="10dp"
android:background="@drawable/plus" />
<TextView
android:id="@+id/now_rate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:text="1.0" />
<TextView
android:id="@+id/rate_minus"
android:layout_width="30dp"
android:layout_height="30dp"
android:background="@drawable/minus" />
</LinearLayout>
</LinearLayout>
</RelativeLayout>
</RelativeLayout>
</RelativeLayout>
<RelativeLayout
android:id="@+id/landscape_player_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:onClick="notClick"
android:visibility="invisible">
</RelativeLayout>
</RelativeLayout>
放大缩小的图标就用设置的图标
SurfaceView改用TextureView,SurfaceView在切换横竖屏时会出现一小段黑屏
SinglePlayerActivity.java
public class SinglePlayerActivity extends Activity implements View.OnClickListener {
private TextureView mTextureView; //SurfaceView改用TextureView,SurfaceView在切换横竖屏时会出现一小段黑屏
private XLPlayer xlPlayer;
SeekBar videoSeekBar;
int videoProNow;
TextView playIcon;
TextView rateView;
GestureDetector mGestureDetector;
ScaleGestureDetector mScaleGestureDetector;
float nowScale = 1f;//缩放的取值范围,0.5f 到 2f
String url;
boolean isBackPlay = false;
MODEL_TYPE modelType = MODEL_TYPE.Rect;
@SuppressLint("HandlerLeak")
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
videoProNow = (int) xlPlayer.getVideoCurrentTime();
((TextView) findViewById(R.id.currentTime)).setText(formatTime(videoProNow));
videoSeekBar.setProgress(videoProNow);
handler.sendEmptyMessageDelayed(1, 1000);
Statistics st = xlPlayer.getStatistics();
// System.out.println("fps = " + st.getFps() + " , bps = " + st.getFormatBps() + ", buffer = " + st.getBufferLength() + "ms");
break;
}
}
};
//orientation
//屏幕状态
enum ScreenState {
SCREEN_FULL,
SCREEN_SHRINK,
SCREEN_PORTRAIT,
SCREEN_LANDSCAPE,
SCREEN_REVERSE_LANDSCAPE
}
private RelativeLayout landscapeView;//横屏view
private RelativeLayout portraitView;//竖屏view
private RelativeLayout playerView;//播放操作view
private ScreenState screenState = ScreenState.SCREEN_PORTRAIT;//初始化屏幕状态
private OrientationEventListener orientationEventListener;//监听手机方向
private int rot = 0;//当前手机方向
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_single);
url = getIntent().getStringExtra("media_url");
mGestureDetector = new GestureDetector(this, simpleOnGestureListener);
mScaleGestureDetector = new ScaleGestureDetector(this, scaleGestureListener);
mTextureView = findViewById(R.id.m_xlsurface);
mTextureView.setOnTouchListener(playerViewTouchListener);
mTextureView.setKeepScreenOn(true);
//监听TextureView的生命周期
mTextureView.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() {
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
Surface videoSurface = new Surface(surface);
xlPlayer.setSurface(videoSurface);
}
@Override
public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
xlPlayer.resize(width, height);
}
@Override
public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
return false;
}
@Override
public void onSurfaceTextureUpdated(SurfaceTexture surface) {
}
});
videoSeekBar = (SeekBar) findViewById(R.id.video_progress);
videoSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
handler.removeMessages(1);
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
xlPlayer.seekTo(seekBar.getProgress());
handler.sendEmptyMessage(1);
}
});
playIcon = (TextView) findViewById(R.id.start);
playIcon.setOnClickListener(playListener);
rateView = (TextView) findViewById(R.id.now_rate);
findViewById(R.id.seek_front).setOnClickListener(this);
findViewById(R.id.seek_back).setOnClickListener(this);
findViewById(R.id.stop).setOnClickListener(this);
findViewById(R.id.clockwise).setOnClickListener(this);
findViewById(R.id.anti_clockwise).setOnClickListener(this);
findViewById(R.id.rate_plus).setOnClickListener(this);
findViewById(R.id.rate_minus).setOnClickListener(this);
findViewById(R.id.setting).setOnClickListener(this);
findViewById(R.id.player_nomal).setOnClickListener(this);
findViewById(R.id.vr_model_ball).setOnClickListener(this);
findViewById(R.id.vr_model_building).setOnClickListener(this);
findViewById(R.id.vr_model_little_star).setOnClickListener(this);
findViewById(R.id.vr_model_two_eye).setOnClickListener(this);
findViewById(R.id.vr_model_pic).setOnClickListener(this);
findViewById(R.id.enable_tracker).setOnClickListener(this);
((CheckBox) findViewById(R.id.back_play)).setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
isBackPlay = isChecked;
}
});
xlPlayer = new XLPlayer(this);
xlPlayer.setForceSwDecode(MainActivity.forceSwDecode);
xlPlayer.setOnPlayerStatusChangeListener(playerStatusChangeListener);
xlPlayer.setOnErrorCodeListener(new OnErrorCodeListener() {
@Override
public void onGetErrorCode(int errorCode) {
switch (errorCode) {
case 100:
Toast.makeText(SinglePlayerActivity.this, "cound not open url", Toast.LENGTH_SHORT).show();
break;
default:
Toast.makeText(SinglePlayerActivity.this, "has error ,code is " + errorCode, Toast.LENGTH_SHORT).show();
break;
}
}
});
if (getIntent().hasExtra("model")){
modelType = (MODEL_TYPE) getIntent().getSerializableExtra("model");
}
// xlPlayer.playVideo(url, modelType);
if (modelType == MODEL_TYPE.VR || modelType == MODEL_TYPE.Ball || modelType == MODEL_TYPE.Architecture) {
xlPlayer.setEnableTracker(true);
}
//使用这个方案,会出现view掉到状态栏后边
View decorView = getWindow().getDecorView();
int mShowFlags =
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
decorView.setSystemUiVisibility(mShowFlags);
//计算状态栏高度
int statusBarHeight = -1;
int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0) {
statusBarHeight = getResources().getDimensionPixelSize(resourceId);
}
//调整竖屏时的主view的位置
RelativeLayout mainView = findViewById(R.id.main_view);
RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) mainView.getLayoutParams();
layoutParams.topMargin =statusBarHeight;
landscapeView = findViewById(R.id.landscape_player_view);//横屏view
portraitView = findViewById(R.id.portrait_player_view);//竖屏view
playerView = findViewById(R.id.player_view);//播放器的各种按钮view
// 手机方向监听器
orientationEventListener = new OrientationEventListener(this, SensorManager.SENSOR_DELAY_NORMAL) {
@Override
public void onOrientationChanged(int orientation) {
if (orientation == OrientationEventListener.ORIENTATION_UNKNOWN) {
return;
}
if (orientation > 350 || orientation < 10) { //0度
orientation = 0;
} else if (orientation > 80 && orientation < 100) { //90度
orientation = 90;
} else if (orientation > 170 && orientation < 190) { //180度
orientation = 180;
} else if (orientation > 260 && orientation < 280) { //270度
orientation = 270;
} else {
return;
}
if (rot != orientation) {
rot = orientation;
switch (orientation) {
case 0:
if (screenState == ScreenState.SCREEN_SHRINK) {
screenState = ScreenState.SCREEN_PORTRAIT;
return;
}
landscapeView.removeView(mTextureView);
portraitView.addView(mTextureView);
landscapeView.removeView(playerView);
portraitView.addView(playerView);
shrinkScreen();
portraitView.setVisibility(View.VISIBLE);
landscapeView.setVisibility(View.INVISIBLE);
screenState = ScreenState.SCREEN_PORTRAIT;
break;
case 90:
if (screenState == ScreenState.SCREEN_FULL) {
screenState = ScreenState.SCREEN_LANDSCAPE;
return;
}
if (screenState == ScreenState.SCREEN_PORTRAIT || screenState == ScreenState.SCREEN_SHRINK) {
portraitView.removeView(mTextureView);
landscapeView.addView(mTextureView);
portraitView.removeView(playerView);
landscapeView.addView(playerView);
landscapeView.setVisibility(View.VISIBLE);
portraitView.setVisibility(View.INVISIBLE);
View decorView = getWindow().getDecorView();
int mHideFlags =
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
decorView.setSystemUiVisibility(mHideFlags);
}
if (getRequestedOrientation() != ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
}
screenState = ScreenState.SCREEN_LANDSCAPE;
break;
case 270:
if (screenState == ScreenState.SCREEN_PORTRAIT || screenState == ScreenState.SCREEN_SHRINK) {
portraitView.removeView(mTextureView);
landscapeView.addView(mTextureView);
portraitView.removeView(playerView);
landscapeView.addView(playerView);
landscapeView.setVisibility(View.VISIBLE);
portraitView.setVisibility(View.INVISIBLE);
View decorView = getWindow().getDecorView();
int mHideFlags =
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
decorView.setSystemUiVisibility(mHideFlags);
}
if (getRequestedOrientation() != ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
screenState = ScreenState.SCREEN_REVERSE_LANDSCAPE;
break;
}
}
}
};
if (orientationEventListener.canDetectOrientation()) {
orientationEventListener.enable();
} else {
orientationEventListener.disable();
}
}
View.OnTouchListener playerViewTouchListener = new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
mScaleGestureDetector.onTouchEvent(event);
mGestureDetector.onTouchEvent(event);
return true;
}
};
ScaleGestureDetector.SimpleOnScaleGestureListener scaleGestureListener = new ScaleGestureDetector.SimpleOnScaleGestureListener() {
@Override
public boolean onScale(ScaleGestureDetector detector) {
nowScale *= detector.getScaleFactor();
nowScale = nowScale > 2f ? 2f : (nowScale < 0.5f ? 0.5f : nowScale);
xlPlayer.setScale(nowScale);
return true;
}
};
float startx, starty;
GestureDetector.SimpleOnGestureListener simpleOnGestureListener = new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onDown(MotionEvent e) {
startx = e.getX();
starty = e.getY();
return super.onDown(e);
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
if (xlPlayer.getModelType() == MODEL_TYPE.Planet) {
float centerX = mTextureView.getWidth() / 2f;
float centerY = mTextureView.getHeight() / 2f;
float startAngle = (float) Math.atan2(starty - centerY, startx - centerX);
float endAngle = (float) Math.atan2(e2.getY() - centerY, e2.getX() - centerX);
xlPlayer.setRotation(0, 0, startAngle - endAngle);
startx = e2.getX();
starty = e2.getY();
} else {
xlPlayer.setRotation((float) (distanceY / 10f / 180f * Math.PI), (float) (distanceX / 10f / 180f * Math.PI), 0);
}
return true;
}
};
View.OnClickListener playListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
xlPlayer.playVideo(url, 0, modelType);
}
};
OnPlayerStatusChangeListener playerStatusChangeListener = new OnPlayerStatusChangeListener() {
@Override
public void onStart() {
int videoProMax = (int) xlPlayer.getVideoTotalTime();
((TextView) findViewById(R.id.duration)).setText(formatTime(videoProMax));
videoSeekBar.setMax(videoProMax);
handler.sendEmptyMessageDelayed(1, 1000);
playIcon.setBackground(getResources().getDrawable(R.drawable.pause));
playIcon.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
xlPlayer.pauseVideo();
}
});
}
@Override
public void onPause() {
super.onPause();
handler.removeCallbacksAndMessages(null);
playIcon.setBackground(getResources().getDrawable(R.drawable.play));
handler.sendEmptyMessageDelayed(1, 1000);
playIcon.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
xlPlayer.resumeVideo();
}
});
}
@Override
public void onResume() {
super.onResume();
handler.sendEmptyMessageDelayed(1, 1000);
playIcon.setBackground(getResources().getDrawable(R.drawable.pause));
playIcon.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
xlPlayer.pauseVideo();
}
});
}
@Override
public void onStop() {
super.onStop();
if (handler != null) {
videoSeekBar.setProgress(0);
((TextView) findViewById(R.id.currentTime)).setText(formatTime(0));
((TextView) findViewById(R.id.duration)).setText(formatTime(0));
handler.removeCallbacksAndMessages(null);
playIcon.setBackground(getResources().getDrawable(R.drawable.play));
playIcon.setOnClickListener(playListener);
}
}
@Override
public void onPrepared() {
super.onPrepared();
playIcon.setOnClickListener(playListener);
}
};
@Override
protected void onResume() {
super.onResume();
if (isBackPlay) {
xlPlayer.setPlayBackground(false);
} else {
xlPlayer.onResume();
}
}
@Override
protected void onPause() {
super.onPause();
if (isBackPlay) {
xlPlayer.setPlayBackground(true);
} else {
xlPlayer.onPause();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
orientationEventListener.disable();
handler.removeCallbacksAndMessages(null);
handler = null;
xlPlayer.releasePlayer();
mTextureView = null;
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}
String formatTime(int time) {
int h = time / 60 / 60;
int m = (time - h * 3600) / 60;
int s = time - h * 3600 - m * 60;
return h + ":" + m + ":" + s;
}
@Override
public void onClick(View v) {
float nowRate;
switch (v.getId()) {
case R.id.seek_front:
xlPlayer.seekTime(10);
break;
case R.id.seek_back:
xlPlayer.seekTime(-10);
break;
case R.id.stop:
xlPlayer.stopVideo();
break;
case R.id.clockwise:
xlPlayer.rotate(false);
break;
case R.id.anti_clockwise:
xlPlayer.rotate(true);
break;
case R.id.rate_plus:
nowRate = Float.parseFloat(rateView.getText().toString());
if (nowRate < 2.0) {
nowRate += 0.1f;
xlPlayer.setRate(nowRate);
rateView.setText(format("%.1f", nowRate));
}
break;
case R.id.rate_minus:
nowRate = Float.parseFloat(rateView.getText().toString());
if (nowRate > 0.5) {
nowRate -= 0.1f;
xlPlayer.setRate(nowRate);
rateView.setText(format("%.1f", nowRate));
}
break;
case R.id.setting:
findViewById(R.id.choose_vr_mode_layout).setVisibility(findViewById(R.id.choose_vr_mode_layout).getVisibility() == View.INVISIBLE ? View.VISIBLE : View.INVISIBLE);
break;
case R.id.player_nomal:
nowScale = 1f;
xlPlayer.setEnableTracker(false);
findViewById(R.id.choose_vr_mode_layout).setVisibility(View.INVISIBLE);
xlPlayer.changeModel(MODEL_TYPE.Rect);
break;
case R.id.vr_model_ball:
nowScale = 1f;
xlPlayer.setEnableTracker(true);
findViewById(R.id.choose_vr_mode_layout).setVisibility(View.INVISIBLE);
xlPlayer.changeModel(MODEL_TYPE.Ball);
break;
case R.id.vr_model_building:
nowScale = 1f;
xlPlayer.setEnableTracker(false);
findViewById(R.id.choose_vr_mode_layout).setVisibility(View.INVISIBLE);
xlPlayer.changeModel(MODEL_TYPE.Architecture);
break;
case R.id.vr_model_little_star:
nowScale = 1f;
xlPlayer.setEnableTracker(false);
findViewById(R.id.choose_vr_mode_layout).setVisibility(View.INVISIBLE);
xlPlayer.changeModel(MODEL_TYPE.Planet);
break;
case R.id.vr_model_pic:
nowScale = 1f;
xlPlayer.setEnableTracker(false);
findViewById(R.id.choose_vr_mode_layout).setVisibility(View.INVISIBLE);
xlPlayer.changeModel(MODEL_TYPE.Expand);
break;
case R.id.vr_model_two_eye:
nowScale = 1f;
xlPlayer.setEnableTracker(true);
findViewById(R.id.choose_vr_mode_layout).setVisibility(View.INVISIBLE);
xlPlayer.changeModel(MODEL_TYPE.VR);
break;
case R.id.enable_tracker:
xlPlayer.setEnableTracker(!xlPlayer.getEnableTracker());
break;
}
}
public void notClick(View v){
}
public void orientationChange(View v){
if(screenState == ScreenState.SCREEN_PORTRAIT || screenState == ScreenState.SCREEN_SHRINK){
portraitView.removeView(mTextureView);
landscapeView.addView(mTextureView);
portraitView.removeView(playerView);
landscapeView.addView(playerView);
fullScreen();
landscapeView.setVisibility(View.VISIBLE);
portraitView.setVisibility(View.INVISIBLE);
screenState = ScreenState.SCREEN_FULL;
}else if(screenState == ScreenState.SCREEN_FULL ||
screenState == ScreenState.SCREEN_REVERSE_LANDSCAPE ||
screenState == ScreenState.SCREEN_LANDSCAPE){
landscapeView.removeView(mTextureView);
portraitView.addView(mTextureView);
landscapeView.removeView(playerView);
portraitView.addView(playerView);
shrinkScreen();
portraitView.setVisibility(View.VISIBLE);
landscapeView.setVisibility(View.INVISIBLE);
screenState = ScreenState.SCREEN_SHRINK;
}
}
//全屏
private void fullScreen() {
if (getRequestedOrientation() != ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
}
View decorView = getWindow().getDecorView();
int mHideFlags =
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
decorView.setSystemUiVisibility(mHideFlags);
}
//退出全屏
private void shrinkScreen() {
if (getRequestedOrientation() != ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
View decorView = getWindow().getDecorView();
int mShowFlags =
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
decorView.setSystemUiVisibility(mShowFlags);
}
}
gif看起来会有卡顿,实际运行一点都不卡