2016-08-01 11 views
16

Próbuję zastosować aktualizacje marginesów lub animacje do widoku podrzędnego, którego element nadrzędny jest przeciągany przy użyciu ViewDragHelper.ViewDragHelper - Zmiany układu potomnego są ignorowane podczas przeciągania

Jednak zaktualizowane właściwości układu nie mają wpływu i nie są renderowane podczas przeciągania widoku. Wszystko, od dodawania i usuwania widoków, do animacji układu lub aktualizacji parametrów układu, jest ignorowane podczas przeciągania:

Utworzyłem opóźnioną operację, która aktualizuje wysokość widoku (zielony widok) po 3 sekundach :

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); 

Sprawdź to demo nagrywania ekranu: http://imgur.com/a/dDiGt

+1

Zgodnie z moją wiedzą ViewDragHelper jedynie przesuwa wartości przesunięcia widoku, ale nie dokonuje zmian, które powodują zmianę układu. – Karakuri

+0

"Widok, przeciągnięty za pomocą' ViewDragHelper' "jest bardzo ogólnikowym opisem. Czy to jest komponent niestandardowy? Jak właściwie go używasz? – user1643723

+0

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

Odpowiedz

1

Android tylko gotowy LayoutParams gdy robi jej przepustkę układu, który nie stanie, gdy widok jest przesuwany. Jeśli chcesz zmienić rozmiar View podczas animacji, powinieneś użyć zamiast tego setScale. Jeśli naprawdę potrzebujesz swojego widoku, aby ponownie uruchomić jego układ, możesz ręcznie zadzwonić pod numer layout(left, top, right, bottom).

Powiązane problemy