2016-03-28 6 views
2

QuickPic uygulamasındakine benzer bir animasyon elde etmek istiyorum. Bir RecyclerView içeriğini göstermek zaman tüm öğeleri bir başlangıç ​​noktasında (tüm öğeler için aynı)RecyclerView - canlandırılan canlandırma -> tüm öğeleri bir konumdan hedef konumuna taşıyın

kimse böyle bir nüfus animasyon yapabiliriz biliyor mu başlayan hedef pozisyona animasyon bunu istiyorum?

+0

Sanırım herhangi bir "populate animasyonu" yapıyorlar. Görüntüler GridView parçasını bir şekilde tutuyorlar ve görüntülerle önceden dolu olan tüm parça üzerinde "ölçek ve yakınlaştırma" animasyonu yapıyorlar. Uygulamanın önbelleğini temizlerseniz ve tekrar başlatırsanız ve ilk defa ve ikinci kez klasöre giderken yakından izlerseniz, göreceksiniz. – MKJParekh

+0

Sanırım RecyclerView öğesinin öğesi. –

cevap

3

Kök noktası (x, y) koordinatlarına sahip olsun. O zaman bu kod ile hedef pozisyona bu noktadan tüm görünümleri canlandırabilirsiniz:

recycler.addOnLayoutChangeListener(new View.OnLayoutChangeListener() { 
    @Override 
    public void onLayoutChange(final View view, 
     final int left, final int top, final int right, final int bottom, 
     final int oldLeft, final int oldTop, final int oldRight, final int oldBottom) { 
    recycler.removeOnLayoutChangeListener(this); 
    for (int i = 0, count = recycler.getChildCount(); i < count; ++i) { 
     final View child = recycler.getChildAt(i); 
     child.setTranslationX(x - child.getLeft()); 
     child.setTranslationY(y - child.getTop()); 
     child.animate() 
      .translationX(0f) 
      .translationY(0f) 
      .setStartDelay(5 * i * i) 
      .setDuration(DURATION) 
      .withLayer() 
      .start(); 
    } 
    } 
}); 

Burada başlangıç ​​noktasında RecyclerView tüm çocukları konumlandırmak ve hedef konumlara animasyon. Tüm animasyonları RecyclerView düzeninden sonra başlatırız, böylece çocuklar oluşturulur ve konumları hesaplanır.

Animasyon gecikmesi 5 * i * i olarak ayarlandığında, gecikmenin nasıl hesaplanabileceğine dair bir örnektir. Bu formülü istediğiniz herhangi bir şeye değiştirebilir veya ihtiyacınız yoksa gecikmeyi kaldırabilirsiniz.

+0

Bu çok umut verici görünüyor ve çok iyi bir fikir. Bunu daha sonra bugün deneyeceğim ... – prom85

+0

Gerçekten çalışabileceğim bir şey bu, ihtiyacım olan fikir. Çok teşekkür ederim. Hatta öğeleri ayarladıktan ve aynı dinleyici ile 'notifyDataSetChanged' çağırarak sonra bile çalışır ... – prom85

+0

Hala bir sorunum var: Animasyonlu çocukların z sırasını sadece animasyon sırasında nasıl kontrol edebilirim? Animasyon sırasında geri dönüşümcü görünümündeki sırasını yansıtmak için z sırasına sahip olmak istiyorum, yani ilk öğe ikincisinden önce olmalı ve bu şekilde devam ediyor ... Şu anda tersi ... Bunun ayarını z ile değiştirebilirim. Animasyona başlamadan önce buna göre sipariş verdim, ama ben bunu android api <21 üzerinde nasıl yapardım? – prom85

İlgili konular