1. 程式人生 > >具體怎麼使用視訊播放螢幕的感重力切換橫豎屏

具體怎麼使用視訊播放螢幕的感重力切換橫豎屏


之前 , 只是介紹了一些程式碼去實現視訊播放的平復翻轉這一功能!可以隨你意進行螢幕的翻轉,滿足使用者的需求。但是,當你真的去做一個像的時候,會有問題出現的哦!那到底是什麼問題呢?待我。。娓娓道來!

是醬汁的,我在使用視訊播放的時候會有點選螢幕切換的按鈕來進行螢幕橫豎屏的切換播放,當然我還有使用翻轉螢幕通過感重力來自動的切換螢幕的橫豎屏。那麼,問題就出現了,點選按鈕和感重力~~~會出現衝突!而衝突是這樣子的:當前我將手機處於橫屏(豎屏),然後此時的我想通過點選按鈕來切換螢幕的方向。那麼,你會遇到 我點選按鈕來切換螢幕不起作用了!!!原因是,手機處於橫屏的時候,此時的感重力命令是一直讓手機處於橫屏的,雖然你有通過點選按鈕切換螢幕方向的命令。但是,感重力命令一直在執行並掩蓋了按鈕的命令。使的按鈕的操作沒什麼用了。

/** OrientationSensorListener.java 類中     */
public void onSensorChanged(SensorEvent event) {
		
		float[] values = event.values;
        int orientation = ORIENTATION_UNKNOWN;
        float X = -values[_DATA_X];
        float Y = -values[_DATA_Y];
        float Z = -values[_DATA_Z];        
        float magnitude = X * X + Y * Y;
        // Don't trust the angle if the magnitude is small compared to the y value
        if (magnitude * 4 >= Z * Z) {
            float OneEightyOverPi = 57.29577957855f;
            float angle = (float)Math.atan2(-Y, X) * OneEightyOverPi;
            orientation = 90 - (int)Math.round(angle);
            // normalize to 0 - 359 range
            if (orientation >= 360) {
                orientation -= 360;
            } 
            if (orientation < 0) {
                orientation += 360;
            }
        }
        
        if(isClickFullScreenButton){
        	
        	//豎屏
        	if(isLandscape && (((orientation > 315 && orientation <= 360) || (orientation >= 0 && orientation <= 45)) 
        			|| (orientation > 135 && orientation <= 225)) ){
        		
        		isLandscape = false;
        		isClickFullScreenButton = false;
        		isSennor = true;
        	} 
        	
        	//橫屏
        	if(!isLandscape &&  ((orientation > 45 && orientation <= 135) || (orientation > 225 && orientation <= 315))){
        		
        		isLandscape = true;
        		isClickFullScreenButton = false;
        		isSennor = true;
        	}
      	
        }
        
        if(!isSennor){//判斷是否要進行中斷資訊傳遞
			return ;
		}
        
        if (rotateHandler!=null) {
			rotateHandler.obtainMessage(888, orientation, 0).sendToTarget();
		}

	}
	
	/** 點選螢幕切換按鈕的時候 同時呼叫該方法 : 中斷Handler資訊傳遞     */
	public  void setIsSennor(){
		
		isSennor = false;
	}
	/** 點選螢幕切換按鈕的時候 同時呼叫該方法 : 確認此時螢幕的方向    */
	public  void setIsLandscape(boolean bool){
		
		isLandscape = bool;
	}
	/** 點選螢幕切換按鈕的時候 同時呼叫該方法 :設定按鈕是否已被點選      */
	public  void setButtonFullScreenClicked(){
		
		isClickFullScreenButton = true;
	}

那麼,我們就這麼來解決(思路):

感重力當被註冊過之後,感重力的方法就會一直監聽著並傳遞資訊釋放命令。其實就像是人體神經通過神經中樞來進行傳遞資訊一樣傳遞資訊釋放命令。那麼,我們就下點藥中斷資訊的傳輸並在此做點手腳就好了。

第一步:當你點選切換按鈕的時候,釋出資訊到感重力說,此時你要中斷資訊的傳輸。

第二步:當你點選切換按鈕的時候,釋出資訊到感重力說,我已經點選了螢幕的切換按鈕。

第三步:當你點選切換按鈕的時候,進行了第一步之後,還要告訴感重力說,此時螢幕所處於的狀態:橫屏或豎屏狀態。

然後,由上面的程式碼來看。按照程式碼的讀取方向講,在onSensorChanged方法中。當用戶點選按鈕來切換了螢幕,而沒有翻轉螢幕的時候,程式讀到 if(!isSennor) 的時候就會中斷!感重力不起作用並完全由按鈕的命令來控制螢幕翻轉。而當用戶翻轉過來螢幕之後,程式一直進行讀下去不會被中斷並實現感重力的被啟用。程式碼中當遇到 boolean變數(isClickFullScreenButton)時候繼續向其方法中走讀。然後會看到兩個判斷分別是橫屏和豎屏狀態,這個是按鈕被點選時候的螢幕狀態,假設是橫屏。(此時使用者翻轉了螢幕)這時候就會設定狀態值,因此也就激活了感重力(isSennor)使得程式會一直保持資訊的傳遞,即是激活了感重力切換螢幕功能。

從而實現了,假設~橫屏~狀態下:使用者通過點選按鈕能夠切換螢幕的豎屏狀態,並一直保持下去。直到使用者翻轉螢幕到豎屏,並由此激活了感重力狀態。由此使用者又能夠隨意通過感重力翻轉螢幕來切換橫豎屏!

建一個群,方便大家交流:蹦蹦噠Android <群號:423923313>