說一下視訊播放跟隨螢幕旋轉,以及activity涉及到的週期問題
阿新 • • 發佈:2019-01-27
最近好忙,唉,廢話不多說,上程式碼
簡單來說就是判斷螢幕狀態的值
private int orientation = ActivityInfo.SCREEN_ORIENTATION_USER;
然後設定一下監聽:
MyOrientationEventListener myOrientationEventListener;
class MyOrientationEventListener extends OrientationEventListener { public MyOrientationEventListener(Context context, int rate) { super(context, rate); // TODO Auto-generated constructor stub } @Override public void onOrientationChanged(int arg0) { // TODO Auto-generated method stub L.d("onOrientationChanged生命週期實現"); L.d(orientation); if (orientation == OrientationEventListener.ORIENTATION_UNKNOWN) { return; //手機平放時,檢測不到有效的角度 } orientation = ActivityInfo.SCREEN_ORIENTATION_USER; VideoViewPlayingActivity.this.setRequestedOrientation(orientation); Display display = getWindowManager().getDefaultDisplay(); int width = display.getWidth(); int height = display.getHeight(); if (width > height) { orientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE; } else { orientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT; } } }
這個初始化和消除所應該放的週期
銷燬的:@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_video_view_playing); PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); mWakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE, POWER_LOCK); laughSQLiteOpenHelper = new LaughSQLiteOpenHelper(this); laughSQLiteOpenHelper.getWritableDatabase(); gestureDetector = new GestureDetector(this, this); myOrientationEventListener = new MyOrientationEventListener(this, SensorManager.SENSOR_DELAY_NORMAL); if (myOrientationEventListener.canDetectOrientation()) { myOrientationEventListener.enable(); } else { Toast.makeText(VideoViewPlayingActivity.this, "Can't Detect Orientation!", Toast.LENGTH_LONG).show(); } Configuration configuration = this.getResources().getConfiguration(); int ori = configuration.orientation; initRock(); Intent intent = this.getIntent(); //獲取的資料 url_info = intent.getStringExtra("url_info"); id_info = intent.getStringExtra("id_info"); image_info = intent.getStringExtra("image_info"); title_info = intent.getStringExtra("title_info"); good_info = intent.getStringExtra("good_info"); collect_info = intent.getStringExtra("collect_info"); if (intent.getStringExtra("type_info") != null) { type = intent.getStringExtra("type_info"); } L.d("得到的圖片的網址", image_info); mIsHwDecode = getIntent().getBooleanExtra("isHW", false); Thread loadThread = new Thread(new LoadMore()); loadThread.start(); initTextView(); initUI(); //獲取的資料 video_palying_title.setText(intent.getStringExtra("title_info")); initViewPager(); /** * 開啟後臺事件處理執行緒 */ mHandlerThread = new HandlerThread("event handler thread", Process.THREAD_PRIORITY_BACKGROUND); mHandlerThread.start(); // mEventHandler = new EventHandler(mHandlerThread.getLooper()); }
@Override
protected void onDestroy() {
super.onDestroy();
/**
* 退出後臺事件處理執行緒
*/
mHandlerThread.quit();
myOrientationEventListener.disable();
}
然後需要根據這個數值去處理是否橫屏,怎麼橫屏
這裡注意的是全屏去除標題欄,非全屏再恢復,監聽的話一定要destory@Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); L.d("onConfigurationChanged生命週期"); if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);// 設定當前activity為豎屏 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); //顯示其他元件 video_playing_back.bringToFront(); video_down_linearlayout.setVisibility(View.VISIBLE); video_playing_back_relativelayout.setVisibility(View.GONE); video_view_title.setVisibility(View.GONE); video_playing_back.setVisibility(View.VISIBLE); video_playing_back_normal.setVisibility(View.VISIBLE); } else if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);// 設定當前activity為橫屏 // 當橫屏時 把除了視訊以外的都隱藏 this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); //隱藏其他元件的程式碼 video_playing_back.bringToFront(); video_down_linearlayout.setVisibility(View.GONE); video_playing_back_relativelayout.setVisibility(View.VISIBLE); video_playing_back_relativelayout.bringToFront(); video_view_title.setVisibility(View.VISIBLE); video_view_title.setText(title_info); video_view_title.bringToFront(); video_playing_back.setVisibility(View.VISIBLE); video_playing_back_normal.setVisibility(View.GONE); } }