1. 程式人生 > >Android 視訊播放控制View核心程式碼

Android 視訊播放控制View核心程式碼

對於一個視訊開發的人員來說,特別是一個剛剛涉足VideoView的人來說,自己寫VideoView寫一個播放器或者說是利用視訊播放的框架來編寫VideoView的人來說,都避免不了要對VideoView的螢幕手勢進行判斷來進行聲音、亮度、視訊的進度的操作,同時這是手勢也有這衝突之處,如何避免或者說是減少誤差行的滑動錯誤,這時候就需要對自己的需求需求進行考量了。

本人對視訊的滑動解析如下:

對螢幕進行分割成對稱的E 和F區域,在E區域進行亮度的調節+視訊進度調節,在F區域進行音量的調節+視訊進度的調節。這樣就可以對音量和亮度的調節起到不互相沖突,接下來就是考慮到視訊進度的調節了,在視訊進度的調節方面中,我們可以看到的快退或者是快進的時候,我們可以不按常規出牌(斜向上或者是斜向斜滑動),對於這種不按套路出牌的也是測試員經常乾的吧,當然作為程式設計師的我們要考慮到客戶的所有“未來的手勢”,給我們帶來的BUG。言歸正傳,在此時我們需要的是判斷到底是上下滑動還是在橫下滑動,那麼問題就來了,當你在斜著滑動的時候上下左右都是在滑動的,你可能要說了:其實判斷下那個滑動的距離大不就行了,思路的確是正確的。我當時也是這麼做了,但是在你滑動稍微不是很快的時候,這時候就會出現,視訊進度和亮度或者視訊進度和音量調節在同時在滑動中,這是你就要吧這個考慮在內了。解決這個,你需要加一個關鍵值判斷就行了,可以通過嘗試試出來。

本人的程式碼如下,僅供參考,關鍵值還是需要Coder們自己把握了:

 @Override
 public boolean onTouch(View v, MotionEvent event) {
        switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN://按下的邏輯處理

                    break;
                case MotionEvent.ACTION_UP://彈起的邏輯處理
                   
                    break;
                case MotionEvent.ACTION_MOVE:
                    //移動邏輯
                    int screenWidth = ScreenUtils.getScreenWidth(getContext());
                    float yMove = actionDownCoordinates[1] - event.getY();
                    float xMove = event.getX() - actionDownCoordinates[0];
                    actionDownCoordinates[0] = event.getX();
                    actionDownCoordinates[1] = event.getY();
                    //將螢幕分成7份,中間5份,兩邊各自1份
                    if ((Math.abs(xMove) + 5) < Math.abs(yMove)) {//豎向調節
                        if (screenWidth / 2 > event.getX()) {//除錯亮度
                            
                        }
                        if (screenWidth / 2 < event.getX()) {//除錯聲音
                            
                        }
                    }
                    if (Math.abs(yMove) + 5
< Math.abs(xMove)) {//橫向調節 } break; } return true; }