2013-07-25 22 views
10

: Bir öğe buna eklendiğinde Gördüğünüz gibibekle ben şu düzen pasajı var

<LinearLayout 
     android:id="@+id/tagContainer" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:animateLayoutChanges="true" > 

    </LinearLayout> 

    <TextView 
     android:id="@+id/commentLabel" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/tagContainer" /> 

, animateLayoutChanges, LinearLayout üzerinde true ayarlandığında bu nedenle, bu ek canlandıran . Tamam, ama kaldırma ile ilgili sorunlar var. Bir öğeyi kaldırırsam, animasyon hala iyi çalınır, ancak aşağıdaki TextView hemen açılır ve animasyonun bitmesini beklemez. Bunu nasıl yapabilirim, hatta daha da iyisi TextView'u LinearLayout animasyonu ile senkronize hale getirebilir mi?

+0

Bize animasyon kodunu gösterebilir ve görünüme animasyon eklemek nasıl? Animasyonun bitiminde, bitiminde ve bitiminde sizi uyaran olaylar olan bir animasyon dinleyicisi veya LayoutTransformation dinleyicisi olmalıdır. –

+0

Hiç bir animasyon kodu yok. Bu özelliği belirtirseniz, çerçeve, öğe ekleme/kaldırma için varsayılan bir solma animasyonu ekler. – WonderCsabo

cevap

18

Aşağıdaki şekilde görünümden LayoutTransition alabilirsiniz:

mLinearLayout = findViewById(R.id.myLayout); 
LayoutTransition layoutTransition = mLinearLayout.getLayoutTransition(); 
layoutTransition.addTransitionListener(new TransitionListener(){ 

      @Override 
      public void endTransition(LayoutTransition arg0, ViewGroup arg1, 
        View arg2, int arg3) { 
       switch(arg2.getId()){ 
           //.... 
           } 
      } 

      @Override 
      public void startTransition(LayoutTransition transition, 
        ViewGroup container, View view, int transitionType) { 
       switch(view.getId()){ 
           //.... 
           } 

      }}); 
+0

Teşekkürler! TextView'in pozisyonda kalmasını nasıl söyleyebilirim? (Sonunu bu geri bildirimlerde yapmak zorunda olduğumu anlıyorum, ama bunu nasıl yapacağımı bilmiyorum). – WonderCsabo

+0

Geri aramalar argümanını kullanarak int "int transitionType" türünün bu geçişi nasıl ifade ettiğini ayırt edebilirsiniz (geçiş türleri için dokümana bakın), kendi mantığınızı uygulamanız gerekir ( "if (view.getView() == R) id.myView && transitionType == LayoutTransition.DISAPPEARING) 'her şeyden Öncelikle geri aramasında ortaya çıkan ve onların argümanları olan olayların sırasını Log { TextView ekleme/kaldırma //} ve bunlar nasıl olduğunu görmek aradı, sonra görüşlerini deney. :) –

+0

Geçiş sürecini ilerletmenin bir yolu var mı? –

0

Bu ne olup bittiğini incelemek için denemek olabileceğini pasajı bir cevap ama hazır kullanmak kodu değil. Benim için

mContainer = (ViewGroup) v.findViewById(R.id.container); 
if (Build.VERSION.SDK_INT >= 11) { 
    mLayoutTransition = mContainer.getLayoutTransition(); 

    if (mLayoutTransition != null) { 
     mLayoutTransition.addTransitionListener(new LayoutTransition.TransitionListener() { 

      @Override 
      public void startTransition(LayoutTransition transition, ViewGroup container, View view, int transitionType) { 
       Log.d("\n\n startTransition: in "+container+" view "+view+" type "+ descr(transitionType)); 
      } 

      @Override 
      public void endTransition(LayoutTransition transition, ViewGroup container, View view, int transitionType) { 
       Log.d("\n\n endTransition: in "+container+" view "+view+" type "+ descr(transitionType)); 
      } 

      String descr(int transitionType) { 
       String[] m = new String[]{"CHANGE_APPEARING","CHANGE_DISAPPEARING","APPEARING","DISAPPEARING"}; 
       return "" + transitionType + ": " + m[transitionType&3] + " changing="+(transitionType&LayoutTransition.CHANGING); 
      } 
     }); 
    } 
} 

, konteyner görünümüdür bir LinearLayout ve ilgi olaydır:

public void endTransition(LayoutTransition transition, ViewGroup container, View view, int transitionType) { // UI thread 
    if (transitionType == LayoutTransition.DISAPPEARING) { 
     // start 2nd animation, it will be done while another view is moved 
    } 
}