更新:我弄清楚发生了什么。看评论。ScaleGestureDetector.OnScaleGestureListener.onScaleEnd()方法未被击中
我想写一个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自动实现了一些存根,而我在填充时没有更改返回值。