android 手勢 GestureDetector onScroll方法的探討

最近研究了下 gpuimage的濾鏡 , 在封裝了濾鏡控件後,對濾鏡容器設置手勢時出現了以下問題:

問題描述

主要問題就是GestureDetector onScroll distance 數據抖動;
在這裏插入圖片描述
在用手勢對象捕捉了dispatchTouchEvent事件後, 本打算 在 onScroll方法中對容器view進行滑動的變化, 第一時間想到使用 translateX和translateY 屬性對view進行滑動;

在這裏插入圖片描述

//sum 每次的移動距離;
mTranslateX += distanceX;
mTranslateY += distanceY;
//設置translate屬性;
setTranslationX(mTranslateX);
setTranslationY(mTranslateY);

但是當使用setTranslationX()方法設置屬性後,滑動是能滑動,會出現抖動效果,通過打印得知distanceX 會出現兩種,一會兒正,一會兒負,導致出現抖動; 用戶體驗效果很差;

問題原因

Left = x + translationX 理論上是沒錯的; 只可能的原因是設置了setTranslationX方法後影響到了GestureDetector的onscroll 方法的distanceX,出現正負交替出現;

查看方法註釋爲:
在這裏插入圖片描述
再看下GestureDetector的回調出onScroll方法的地方 onTouchEvent方法

在這裏插入圖片描述
重點看下MotionEvent.ACTION_MOVE 事件
在這裏插入圖片描述
當我長按時,控件出現不停的閃爍,只可能是進入最後一個判斷方法了,這裏變化的只有focusX這個關於焦點的變量; 難道是setTranslateX改變了焦點,影響了多指觸摸?? 但是我一直全程單指按住,畫面一直閃爍,彷彿是兩個點觸摸一樣; 看到這裏沒法解釋了:(;

問題解決
後來 將 setTranslate方法改爲setScrollX方法,完美解決,通過移動內容,不改變位置屬性爲什麼就不會抖動了呢,不得而知,歡迎看到的朋友踊躍解釋一下;

發佈了46 篇原創文章 · 獲贊 3 · 訪問量 5094
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章