如何在 webview 中实现 fling 手势?

发布于 2024-10-18 09:47:34 字数 162 浏览 2 评论 0原文

我在 webview 中加载图像,并想通过 fling 手势在它们之间切换,但是在 webview 中实现手势检测器,所有事件都由 detector = webview 函数捕获,因为缩放和 mt 不起作用。有什么解决办法吗?过滤事件并将它们传递给ontouch?示例代码非常感谢。

感谢大家。

I load images in webview and would like to switch between them by fling gesture, but implementing gesture detector in webview case all events are caugth by detector = webview function as zoom and mt dont work. Is there any solution? Filtering events and passing them dow to ontouch? Example code very apreciated.

Thanks to all.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

滥情空心 2024-10-25 09:47:34

关键是检查gestureDetector.onTouchEvent 的返回值,如果gestureDetector 没有处理该事件,则将其传递给WebView 超类。另外,即使您使用 onDown 方法执行某些操作,也请确保从 onDown 方法返回“false”,以便超类可以初始化其内部状态。如果您的 onFling 方法处理该事件,则返回“true”,否则返回“false”,以便应用默认方法。

public class FlingView extends WebView implements OnGestureListener {

    private GestureDetector gestureDetector;

    public FlingView(Context context) {
        super(context);
        init();
    }

    public void init() {
        gestureDetector = new GestureDetector(this.getContext(), this);
    }

    @Override
    public boolean onTouchEvent(MotionEvent e) {
        return (
        gestureDetector.onTouchEvent(e) || super.onTouchEvent(e));
    }

    /* OnGestureListener events */

    public boolean onDown(MotionEvent e1) {
        // Initialize event here
        ...

        // give the superclass a chance at tap events
        return false;
    }

    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
    float velocityY) {
        if (test) {
            // handle fling
            ...
            return true;
        } else {
            // let superclass handle the event
            return false;
        }
    }
}

The key to this is to check the return value from gestureDetector.onTouchEvent and, if gestureDetector did not handle the event, then pass it on to the WebView superclass. Also, be sure to return "false" from your onDown method even if you do something with it, so the superclass can initialize its internal state. If your onFling method handles the event, return "true", otherwise return "false" so the default methods can apply.

public class FlingView extends WebView implements OnGestureListener {

    private GestureDetector gestureDetector;

    public FlingView(Context context) {
        super(context);
        init();
    }

    public void init() {
        gestureDetector = new GestureDetector(this.getContext(), this);
    }

    @Override
    public boolean onTouchEvent(MotionEvent e) {
        return (
        gestureDetector.onTouchEvent(e) || super.onTouchEvent(e));
    }

    /* OnGestureListener events */

    public boolean onDown(MotionEvent e1) {
        // Initialize event here
        ...

        // give the superclass a chance at tap events
        return false;
    }

    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
    float velocityY) {
        if (test) {
            // handle fling
            ...
            return true;
        } else {
            // let superclass handle the event
            return false;
        }
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文