更新:我弄清楚發生了什麼。看評論。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自動實現了一些存根,而我在填充時沒有更改返回值。