我有一个显示Fragment页面的ViewPager。每个Fragment都是一个WebView,它们显示离线网站。其中一些webview具有javascript滑动事件以使其正常工作。
如果webview没有滑动事件(在javascript中),则希望实现这样的功能,触摸事件将传递给ViewPager,否则将被webview消耗。
我尝试重写ViewPagers。
然而,这样做阻止了
是否有办法先将触摸事件传递给webView,如果在fragment中未被使用,则将其传回
如果我在
如果webview没有滑动事件(在javascript中),则希望实现这样的功能,触摸事件将传递给ViewPager,否则将被webview消耗。
我尝试重写ViewPagers。
@Override
public boolean onInterceptTouchEvent(MotionEvent event)
{
return (this.swipeable) ? super.onInterceptTouchEvent(event) : false;
}
然而,这样做阻止了
ViewPager
的可滑动(预期效果),但也阻止了滑动事件传递到webview,因此我得到了两个不希望看到的结果。是否有办法先将触摸事件传递给webView,如果在fragment中未被使用,则将其传回
ViewPager
?如果我在
MyViewPager
中出现错误,代码如下:public class MyViewPager extends ViewPager implements GestureDetector.OnGestureListener
{
private static final String TAG = MyViewPager.class.getSimpleName();
private boolean swipeable = true;
private float lastX = 0;
private long lastTime = 0 ;
private GestureDetector mGestureDetector;
private boolean mScrolling = false;
public MyViewPager(Context context) {
super(context);
mGestureDetector = new GestureDetector(context, this);
}
public MyViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
mGestureDetector = new GestureDetector(context, this);
}
public void setSwipeable(boolean swipeable) {
this.swipeable = swipeable;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event)
{
/* float speed = 0;
if(event.getAction() == MotionEvent.ACTION_MOVE)
{
if(lastX!=0) {
speed = (event.getRawX()- lastX) / (System.currentTimeMillis()-lastTime);
if(speed < 0.0 ){speed *=-1;}
Log.e(TAG, "Move at speed ->"+speed);
if(speed >0.5){return false;}
}
lastX = event.getRawX();
lastTime = System.currentTimeMillis();
return true;
}*/
// return true;
return (this.swipeable) ? super.onInterceptTouchEvent(event) : false;
}
@Override
public boolean onTouchEvent(MotionEvent event)
{
Log.i(TAG, "onTouch event");
// mGestureDetector.onTouchEvent(event);
return false;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velX, float velY) {
Log.i(TAG, "flinging");
return false;
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distX, float distY)
{
float displacement = distX;
return false;
}
// Unused Gesture Detector functions below
@Override
public boolean onDown(MotionEvent event) {
return false;
}
@Override
public void onLongPress(MotionEvent event) {
// we don't want to do anything on a long press, though you should probably feed this to the page being long-pressed.
}
@Override
public void onShowPress(MotionEvent event) {
// we don't want to show any visual feedback
}
@Override
public boolean onSingleTapUp(MotionEvent event) {
// we don't want to snap to the next page on a tap so ignore this
return false;
}
}