2015-08-13 10 views
8

Meine App enthält mehrere Ansichten (scrollbar), eine davon ist CustomView (erweitert Ansicht), gibt es ein Android-Ereignis ausgelöst, wenn diese Ansicht in den sichtbaren Bereich kommt.Wird ein Ereignis ausgelöst, wenn die Android-Ansicht in der App sichtbar wird?

Der Ansatz i obwohl Hintergrund-Thread während des Zeitraums von onAttachedToWindow-onDetachedToWindow Dieser Thread customView.getGlobalVisibleRect(rectangle) der Verwendung zu überprüfen, ob ein Teil der Ansicht sichtbar ist, auf dem Bildschirm verwenden, aber das ist Ansatz Spin-Lock, Gibt es einen besseren Weg, Sichtbarkeit, jedes Ereignis zu erfassen, die gefeuert werden, wo ich getGlobalVisibleRect

+0

siehe 'ViewTreeObserver' – pskink

+1

Haben Sie versucht' onVisibilityChanged() '? Setzen Sie Ihre Prüflogik in die überschriebene 'onVisibilityChanged()' - Methode in Ihrer benutzerdefinierten Ansicht, um festzustellen, ob die vollständige Ansicht sichtbar ist. – initramfs

+0

Sie meinen wirklich sichtbar, dass der Benutzer auf dem Display oder die Sichtbarkeit der Ansichten auf VISIBLE gesetzt ist? – skywall

Antwort

6

Hier ist ein Beispielcode mit ViewTreeObserver anrufen:

final View viewTemp = convertView; 

convertView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
    @Override 
    public void onGlobalLayout() { 
     int rowHeight = viewTemp.getGlobalVisibleRect(); 
     ... 
    } 

Anmerkungen:

  • Ich kenne Ihren Code nicht und es ist nicht veröffentlicht. Der Code viewTemp = convertView ist nur ein Beispiel, Code von der Verwendung eines Adapters.
  • Dies ist ein Listener, wenn das Layout aus welchem ​​Grund auch immer gezeichnet wird.
+2

danke für die Antwort, ich würde addOnScrollChangeListener auch addOnWindowAttachListener, um einige zu decken mehr Fälle – Pradeep

Verwandte Themen