2012-03-08 4 views
5

J'ai une vue dans mon activité. Je veux détecter quand il s'est déplacé autour de l'écran en raison de n'importe quelles actions (défilement d'utilisateur, vues relatives redimensionnent le contenu changeant, etc.). Ceci est destiné à être dans une bibliothèque, donc je peux interroger la hiérarchie, mais je ne la contrôle pas, et je ne peux pas la modifier autrement que d'ajouter des écouteurs d'événements.Comment puis-je détecter quand ma vue a été déplacée?

Existe-t-il un moyen d'obtenir ceci comme un événement, plutôt que d'interroger?

Répondre

7

Il est un événement pour cela: View.getViewTreeObserver().addOnScrollChangedListener()

final ViewTreeObserver.OnScrollChangedListener mScrollChangedListener = ...; 

@Override 
protected void onAttachedToWindow() { 
    super.onAttachedToWindow(); 
    getViewTreeObserver().addOnScrollChangedListener(mScrollChangedListener); 
} 

@Override 
protected void onDetachedFromWindow() { 
    super.onDetachedFromWindow(); 
    getViewTreeObserver().removeOnScrollChangedListener(mScrollChangedListener); 
} 

Source : Android Source Code (4.0), android.view.SurfaceView.java:205

0

Avez-vous essayé d'écouter les événements 'drag' sur votre View?

Essayez la mise en œuvre onDragListener, un bon endroit pour commencer à comprendre comment faire ce serait le glisser-déposer tutoriel Android: http://developer.android.com/guide/topics/ui/drag-drop.html

+0

Malheureusement, cela ne fournit pas les événements. Je ne sais pas pourquoi, mais il semble que ce n'est pas exactement ce que ce genre d'événement est pour. – Hounshell

+0

Si vous voulez cliquer sur une vue et la déplacer, c'est un 'glisser', si c'est quelque chose que vous pouvez faire défiler, vous pouvez regarder un onScrollListener. Il n'y a pas d'écouteur pour le redimensionnement, donc vous devrez peut-être implémenter cet écouteur par vous-même. – Soham

+0

Ce que je cherche n'est pas un glisser ou un événement de défilement que je contrôle. Mon vue se trouve à l'intérieur d'une vue tierce qui peut déplacer ma vue de plusieurs façons. Je veux savoir quand j'ai été déplacé. Parce que je ne possède pas la vue parent, je ne peux pas faire une quelconque substitution sur son comportement – Hounshell

Questions connexes