WebView с жестом смахивания
У меня есть страница с первой частью, содержащей анимацию. когда пользователь проводит пальцем, анимация исчезает, и появляется веб-просмотр. При пролистывании веб-просмотр идет, и анимация снова появляется. так как веб-просмотр потреблял касание, я переопределяю сенсор веб-просмотра и передаю его объекту жеста-детектора. Но что я действительно хочу, так это переключение управления между веб-просмотром и детектором жестов. На данный момент детектор жестов работает или веб-просмотр работает, но он не работает вместе. Любая помощь?
Это то, что я делаю сейчас:
webView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
return gestureDetector.onTouchEvent(event);
// return false;
}
});
Детектор жестов обрабатывает перелистывание анимации и веб-просмотра:
gestureDetector = new GestureDetector(getActivity(),
new GestureDetector.SimpleOnGestureListener() {
/* Function to pause the video on tap */
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
/* On Touch event pressed play and pause the videoplayer */
return true;
}
/*
* OnDown() has to return true for the fling methof to take
* place
*/
@Override
public boolean onDown(MotionEvent e) {
return true;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2,
float velocityX, float velocityY) {
1 ответ
Используйте GestureDetector с пользовательским веб-представлением.
webView.setGestureDetector(новый GestureDetector(новый CustomeGestureDetector()));
детектор жестов:
private class CustomeGestureDetector extends SimpleOnGestureListener {
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
if(e1 == null || e2 == null) return false;
if(e1.getPointerCount() > 1 || e2.getPointerCount() > 1) return false;
else {
try { // right to left swipe .. go to next page
if(e1.getX() - e2.getX() > 100 && Math.abs(velocityX) > 800) {
//do your stuff
return true;
} //left to right swipe .. go to prev page
else if (e2.getX() - e1.getX() > 100 && Math.abs(velocityX) > 800) {
//do your stuff
return true;
} //bottom to top, go to next document
else if(e1.getY() - e2.getY() > 100 && Math.abs(velocityY) > 800
&& webView.getScrollY() >= webView.getScale() * (webView.getContentHeight() - webView.getHeight())) {
//do your stuff
return true;
} //top to bottom, go to prev document
else if (e2.getY() - e1.getY() > 100 && Math.abs(velocityY) > 800 ) {
//do your stuff
return true;
}
} catch (Exception e) { // nothing
}
return false;
}
}
}
пользовательский веб-вид
public final class CustomWebView extends WebView {
private GestureDetector gestureDetector;
/**
* @param context
* @param attrs
* @param defStyle
*/
public CustomWebView(Context context) {
super(context);
}
/**
* @param context
* @param attrs
* @param defStyle
*/
public CustomWebView(Context context, AttributeSet attrs) {
super(context, attrs);
}
/**
* @param context
* @param attrs
* @param defStyle
*/
public CustomWebView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
/*
* @see android.webkit.WebView#onScrollChanged(int, int, int, int)
*/
@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
super.onScrollChanged(l, t, oldl, oldt);
}
/*
* @see android.webkit.WebView#onTouchEvent(android.view.MotionEvent)
*/
@Override
public boolean onTouchEvent(MotionEvent ev) {
return gestureDetector.onTouchEvent(ev) || super.onTouchEvent(ev);
}
public void setGestureDetector(GestureDetector gestureDetector) {
this.gestureDetector = gestureDetector;
}
}