2014-07-04 35 views
7

LinearLayout için LinearLayout var, LinearLayout ana sayfasına android:animateLayoutChanges="true" uygularım. Kullanıcı bir geçiş düğmesini tıkladığında, LinearLayout "çökmeler" (Ben programlı LinearLayout.GONE olarak görünümün görünürlüğünü ayarlayın ve bunu tekrar tıkladığınızda, programlı LinearLayout.VISIBLE geri görünürlüğünü ayarlayarak genişletir.XML'de "animateLayoutChanges" özniteliğini kullanarak düzenleri belirleme

bunun animasyon çöken ve doğru olarak çalışmalarını genişleterek.

Ancak LinearLayout kapatılabilen/genişletilebilir geri çöküşün animasyon tamamlanmadan önce üstüne ek bileşeni altında herhangi bir öğe. arka dayama öğeler true için animateLayoutChanges kümesi vardır ebeveyn içeride dEĞİLDİR ve onları içine koyabileceğim bir şey olduğunu düşünmüyorum.

Tüm bu düzen başka LinearLayout içine programlı takıldığında
<!-- Top most LinearLayout--> 
<LinearLayout> 

    <!-- LinearLayout containing android:animateLayoutChanges="true"--> 
    <LinearLayout> 

     <!-- RelativeLayout containing button to toggle LinearLayout visibility below--> 
     <RelativeLayout> 
     </RelativeLayout> 

     <!-- LinearLayout that has its visibility toggled --> 
     <LinearLayout> 
     </LinearLayout> 

    </LinearLayout> 

</LinearLayout> 

(aşağıya bakınız):

<LinearLayout 
    android:id="@+id/form_container" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" > 

    <!-- This is where the previous XML layout containing the toggle-able LinearLayout 
     is inserted programmatically. --> 

    <!-- This button snaps back up to the top before the animation is complete. --> 
    <Button /> 

</LinearLayout> 

İşte benim düzen hiyerarşisi (Kısa tutmaya özelliklerini söz etmedi) 'dir eklediyseniz, animateLayoutChangesanimateLayoutChanges doğru olanı eklediğimde sorunun çözüleceğinin farkındayım. Ancak, bu birkaç nedenden dolayı bir seçenek değildir.

Peki başka bir iş var mı?

cevap

0

Sadece bir düşünce ... Katıştırılmış düzenden 'animateLayoutChanges' öğesini kaldırır ve bunu ana düzenine eklerseniz (ikinci XML)? Bunun herşeyi canlandıracağından şüpheleniyorum. Mülkü programsal olarak yerleştirdiğinizden, özelliği kodda doğru olarak ayarlamanız gerekebilir.

İşte programlı bunu nasıl var Stack-overflow

Başka bir seçenek yerine içinde TransitionManager.beginDelayedTransition(transitionsContainer); ekleyerek animateLayoutChanges deneyin kullanmanın geri

myButton.animate().translationY(floatYposition).setDuration(300); //300 milliseconds 
1

oturana butonuna programlı .animate özelliğini kullanmak olacaktır senin transitionsContainer öğesinin, hareketli olması gereken görünümlerin ana öğesi olduğu onClick yöntemi. Ebeveyninizin düzenidir Örneğin

<LinearLayout android:id="@+id/transitions_container"> 

    <!--add your widgets here--> 

</LinearLayout> 

Ve kodunda

final ViewGroup transitionsContainer = (ViewGroup) view.findViewById(R.id.transitions_container); 

button.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     TransitionManager.beginDelayedTransition(transitionsContainer); 
     // do your staff with changing children of transitionsContainer   
    } 
}); 

detaylar için kontrol edin https://medium.com/@andkulikov/animate-all-the-things-transitions-in-android-914af5477d50 olduğunu.

İlgili konular