【发布时间】:2011-07-06 10:54:53
【问题描述】:
更新:我知道发生了什么。见 cmets。
我正在尝试编写一个 ViewSwitcher,它将所有手势传递给它的第一个孩子,直到它收到一个缩放手势;然后它将它们传递给它的第二个孩子,直到那个孩子再次完全缩小,然后它恢复到第一个孩子。我的子类有一个 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 自动实现了一些存根,我在填写它们时没有更改返回值。
【问题讨论】:
标签: android callback scale gesturedetector