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);这样接可以不影响原先的功能了。

猜你喜欢

转载自blog.csdn.net/weixin_42042620/article/details/84319978