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