Обновление: я понял, что происходит. См. Комментарии.
Я пытаюсь написать 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: Как определить, когда прокрутка закончилась
Is что здесь происходит? Если да, то в чем смысл метода onScaleEnd ()?
РЕДАКТИРОВАТЬ:
Я решил это: это потому, что мои методы возвращают false. Eclipse автоматически реализовал некоторые заглушки, и я не изменил возвращаемые значения при их заполнении.