2016-08-01 16 views
16

Ich versuche, Marginupdates oder Animationen auf eine untergeordnete Ansicht anzuwenden, deren übergeordnetes Element mit einem ViewDragHelper gezogen wird.ViewDragHelper - Untergeordnete Layoutänderungen werden beim Ziehen ignoriert

Die aktualisierten Layouteigenschaften haben jedoch keine Auswirkungen und werden nicht wiedergegeben, während die Ansicht gezogen wird. Alles vom Hinzufügen und Entfernen von Ansichten, Layoutanimationen oder Layoutparamupdates wird beim Ziehen ignoriert:

Um dieses Problem zu veranschaulichen, habe ich eine verzögerte Runnable erstellt, die die Höhe einer Ansicht (die grüne Ansicht) nach 3 Sekunden aktualisiert :

spacer.postDelayed(new Runnable() { 
    @Override 
    public void run() { 
      Log.d(TAG,"set layout params!!!!"); 
      ViewGroup.LayoutParams spacerParams = spacer.getLayoutParams(); 
      spacerParams.height = (int) (200+(Math.random()*200)); 
      spacer.setLayoutParams(spacerParams); 
    } 
},3000); 

prüfen diese Demo Screen-Recording: http://imgur.com/a/dDiGt

+1

ViewDragHelper versetzt die verschobenen View-Übersetzungswerte meines Wissens nach nur, es führt nicht wirklich Änderungen durch, die ein Re-Layout verursachen. – Karakuri

+0

"Ansicht, gezogen mit einem' ViewDragHelper' "ist eine sehr vage Beschreibung. Ist das eine benutzerdefinierte Komponente? Wie benutzt du es eigentlich? – user1643723

+0

@ user1643723 https://developer.android.com/reference/android/support/v4/widget/ViewDragHelper.html – Richard

Antwort

1

Android nur bereit LayoutParams, wenn sein ein Layout Pass zu tun, was nicht geschieht, wenn Ansicht bewegt wird. Wenn Sie die Größe des View während der Animation ändern möchten, sollten Sie stattdessen setScale verwenden. Wenn Sie Ihre Ansicht wirklich benötigen, um ihr Layout erneut auszuführen, können Sie layout(left, top, right, bottom) manuell aufrufen.

Verwandte Themen