Android日記之2012\01\10

嗯,今天似乎也沒幹什麼事啊。。。。基本上一天的時間都花在觸屏手勢的判斷上了。
其實主要是爲了實現一個VideoView的全屏播放,需求是希望做成兩手指外拉,全屏,兩手指向裏縮,恢復成正常大小。原來是用SimpleOnGestureListener()中的onDoubleTap來實現的全屏。但畢竟和需求不符,需要改。一開始嘗試的是SimpleOnGestureListener()的onFling取其中的velocityX來和一個固定值比較,可以實現滑動的判斷,但是這個只能用於單指。不過至少離目標也近了一步了嘛。
之後看了一些別人的例子和文檔,就索性直接在OnTouch中,通過event的值來判斷了。通過輸出發現了這4個比較有用的值: MotionEvent.ACTION_DOWN、MotionEvent.ACTION_MOVE、MotionEvent.ACTION_POINTER_DOWN、MotionEvent.ACTION_POINTER_UP。當一個手指按下去後,觸發的是ACTION_DOWN,只要手指不擡起來,只觸發一次,之後便全是ACTIONMOVE了,當另一個手指按下去並且擡起來的時候,分別觸發的是ACTION_POINTER_DOWN和ACTION_POINTER_UP。發現這4個值的時候是欣喜若狂啊,發現問題可以解決了。於是乎,在這4個值下分別來獲得一個座標點。但是,ACTION_MOVE下是一串點,一個通過event.getPointerCount()來獲得這個點串的長度,就好比是一個list,event.getX(event.getPointerCount()-1)來獲得最後一個點的座標。然後再做邏輯判斷,比較當ACTION_POINTER_UP和ACTION_MOVE的X軸差大於ACTION_POINTER_DOWN和ACTION_DOWN的X軸差時,爲全屏,反之則爲普通狀態。運行時,全屏的效果是明顯的,但是縮不回來了。一查,發下ACTION_DOWN和ACTION_POINTER_DOWN的座標點是一樣的,所以邏輯判斷上就有了偏差。之後只能判斷ACTION_POINTER_UP和ACTION_MOVE的X軸差大於一個固定值時爲全屏,ACTION_POINTER_UP和ACTION_MOVE的X軸差小於一個固定值時,爲普通狀態。
其實,對於Y軸的判斷類似,就不多寫了,而且在寫這篇日記的時候,突然想到完全可以不用ACTION_MOVE,而用ACTION_UP來獲得點值,呵呵,明天到了公司去測試下,畢竟感覺ACTION_MOVE也有點不靠譜。也希望大神們能在多點手勢判斷上給點意見~~~。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章