Mise à jour: J'ai compris ce qui se passait. Voir les commentaires. J'essaye d'écrire un ViewSwitcher qui passe tous les gestes à son premier enfant jusqu'à ce qu'il reçoive un geste d'échelle; il les passe ensuite à son deuxième enfant jusqu'à ce que l'enfant soit complètement rétrogradé complètement, quand il revient au premier enfant. Ma sous-classe a une ScaleGestureDetector et je fait un auditeur très simple:Echec de la méthode ScaleGestureDetector.OnScaleGestureListener.onScaleEnd()
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();
}
}
Comme vous pouvez le voir tout ce qu'il fait est de prendre une référence à l'objet propriétaire de la construction, puis passer quelques événements à des méthodes au sein de la classe propriétaire. Toutefois, onScaleEnd() n'est pas atteint par le code. Je suis conscient que onInterceptTouchEvent peut être un peu risqué; J'ai suivi les suggestions dans les docs Android pour aussi près que possible et
@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;
}
Je lis quelque part ailleurs qu'un GestureDetector ne peut pas recevoir l'événement ACTION_UP:
Android: How to detect when a scroll has ended
Est-ce que ce qui est qui se passe ici? Si oui, quel est le point de la méthode onScaleEnd()?
EDIT:
J'ai travaillé ceci: il est parce que mes méthodes renvoient faux. Eclipse a auto-implémenté certains stubs et je n'ai pas modifié les valeurs de retour lorsque je les ai remplis.