android - ScaleGestureDetector.OnScaleGestureListener.onScaleEnd() 方法没有被击中

标签 android callback scale gesturedetector

更新:我知道发生了什么。查看评论。

我正在尝试编写一个 ViewSwitcher,它将所有手势传递给它的第一个 child ,直到它收到一个缩放手势;然后它将它们传递给它的第二个 child ,直到该 child 再次完全缩小,然后恢复到第一个 child 。我的子类有一个 ScaleGestureDetector,我做了一个非常简单的监听器:

    protected class OnScaleModeSwitcher implements ScaleGestureDetector.OnScaleGestureListener
    {
        protected PageFlipSwitcher owner;

        public OnScaleModeSwitcher(PageFlipSwitcher newOwner)
        {
            super();
            owner = newOwner;
        }

        @Override
        public boolean onScale(ScaleGestureDetector detector) {
            return false;
        }

        @Override
        public boolean onScaleBegin(ScaleGestureDetector detector) {
            owner.onScaleBegin();
//returning false here causes the rest of the gesture to be ignored.
            return false;
        }

        @Override
        public void onScaleEnd(ScaleGestureDetector detector) {
            owner.onScaleEnd();
        }
    }

如您所见,它所做的只是在构造时引用所有者对象,然后将一些事件传递给所有者类中的方法。但是,代码未达到 onScaleEnd()。

我知道 onInterceptTouchEvent 可能有点冒险;我尽可能地遵循了 Android 文档中的建议,并且有

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev)
    {
        onTouchEvent(ev);
        return false;
    }

    @Override
    public boolean onTouchEvent(MotionEvent ev)
    {
//mode is the name of the ScaleGestureDetector
        mode.onTouchEvent(ev);

//this code just passes events to the children
//it seems to work OK
        if(zoomActive)
        {
            //ZoomSwitcher
            getChildAt(1).onTouchEvent(ev);
        }
        else
        {
            //Gallery
            getChildAt(0).onTouchEvent(ev);
        }
        return true;
    }

我在其他地方读到 GestureDetector 可能不会收到 ACTION_UP 事件:

Android: How to detect when a scroll has ended

这就是这里发生的事情吗?如果是这样,onScaleEnd() 方法的意义何在?

编辑:

我已经解决了这个问题:这是因为我的方法返回 false。 Eclipse 自动实现了一些 stub ,我在填充它们时没有更改返回值。

最佳答案

如果设置了从 onScaleBegin(...) 返回 false 的 ScaleGestureDetector,则不会命中任何后续方法。通常,使用 MotionEvent 但返回 false 的方法不会获得后续的 MotionEvent,直到 ACTION_UP 之后,当监听器被重置时。

关于android - ScaleGestureDetector.OnScaleGestureListener.onScaleEnd() 方法没有被击中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6595244/

相关文章:

android - 支持非阻塞 IO 的 Android HTTP 请求框架

java - 即使在网页加载完成后,webview 中的进度条也会继续加载

c++ - postgresql查询c++回调

javascript - 使用removeEventListener删除包装函数回调

android - 如何根据设备屏幕尺寸将百分比相对布局中的 ImageView 设置为以下比例,16 :9, 1 :1, 3 :2, 2 :1, 4:3

java - 在android中实现保存按钮

android - FragmentStatePagerAdapter IllegalStateException : <MyFragment> is not currently in the FragmentManager

node.js - nodejs grunt子进程回调函数示例

机器人 : scaling bitmap to fit imageview

java - 重新缩放动画