1. 程式人生 > >android webview 右滑返回與GestureDetector 手勢衝突解決

android webview 右滑返回與GestureDetector 手勢衝突解決

最近在搞一個資訊新聞右滑返回退出當前頁面,最開始用的是實現SwipeBackActivityBase這個介面,設定 getSwipeBackLayout().setEdgeSize(metrics.widthPixels / 3);//經驗證設定一半等於沒設定,只有部分割槽域滑動有滑動返回效果,後面索性我就用滑動手勢來實現,先貼程式碼:
class MyGestureListener extends GestureDetector.SimpleOnGestureListener {
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
if(e2.getX() -e1.getX() >100 && Math.abs(e2.getY() -e1.getY()) <100) {
if(mWebView.canGoBack()) {
mWebView.goBack();
} else {
finish();
}
}
return super.onFling(e1, e2, velocityX, velocityY);
}
}
gestureDetector = new GestureDetector(new MyGestureListener());
mWebView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
gestureDetector.onTouchEvent(event);
mWebView.onTouchEvent(event);


return true;
}
});
通過滑動webview頁面獲得監聽,然後將滑動時間轉發給gestureDetector.onTouchEvent(event);,然後gestureDetector 又將這個轉發給MyGestureListener的onFling。字義一個MyGestureListener 繼承自SimpleOnGestureListener,實現了一個滑動onFling方法,通過滑動距離去判斷我們的返回操作。這個時候右滑返回是可以實現了(可以自己再加動畫效果),但原先h5頁面的操作比如上下滑動,點選等都不能進行了,這個時候我們在轉發手勢事件的時候一定要記得加上轉發webview的touch事件mWebView.onTouchEvent(event);這樣接可以不影響原先的功能了。