SORU
3 EYLÜL 2012, PAZARTESİ


Gmail Çalışma Örnek Üç Parça Animasyon Senaryo tam?

TL;DR: bir arıyorumtam örnek çalışma"senaryo. animasyon "üç parça Gmail olarak görüyorum. ne Özellikle, bu iki parça ile başlamak istiyoruz:

two fragments

Bazı UI olay üzerine (Parça B bir şey dokunarak, örneğin), istiyoruz:

  • Ekranın sol tarafında slayt için Bir parça
  • Parça B ekranın sol kenarına kaydırın ve spot Parça boşalan almak için küçültmek
  • Parça C ekranın sağ tarafında slayt ve spot Parça boşalan almak için B

Ve, GERİ düğmesine basın, operasyonların bu set tersine olmak istiyoruz.

Şimdi, kısmi uygulamaları çok gördük, dördü aşağıda Gözden geçireceğim. Eksik olmanın ötesinde, hepsinin sorunları var.


@Reto Meier aynı temel soru this popular answer, FragmentTransaction setCustomAnimations() kullanacağınız gösteren katkıda bulunmuştur. İki parça bir senaryo için (örneğin, sadece başlangıçta Bir Parça görmek ve yeni Parça B animasyonlu efektleri kullanarak değiştirmek istiyorum), tam bir anlaşma yapıyorum. Ancak:

  • Sadece "" ve "" animasyon, farklı animasyonlar üç parça senaryo için gerekli nasıl başa çıkacağını göremiyorum tek tek belirleyebilirsiniz beri
  • <objectAnimator> onun örnek kodu kullanır, kablolu pozisyonlarda piksel, ve bu gibi görünüyor pratik verilen çeşitli ekran boyutlarına, henüz setCustomAnimations() gerektirir animasyon kaynakları, engellemek mümkün tanımlama bunlar Java
  • Nesnenin yüzdesi olarak alan ayırma LinearLayout android:layout_weight gibi şeylerle ölçek kravat için animatör olarak nasıl bir kayıp am
  • Parça C başlangıçta (GONE? nasıl işlendiğini gibi bir kayıp duyuyorum 0 android:layout_weight? 0 ölçeği ön-animasyonlu? başka bir şey?)

@Roman Nurik işaret ettiği 24**, sizin tanımladığınız olanlar da dahil olmak üzere. O kadar da zor-kablolu pozisyonları, kendi özel tasarım yöneticisi, alt icat pahasına sorunu çözmeye yardımcı olabilir. Bazı yardımcı olur, ama hala Reto çözüm geri kalanı beni şaşkına uğrattı.


this pastebin entry yazar bazı kabartan ve kesinliği, temel olarak üç parçaları kapta başlangıçta bulunması söyleyerek, Fragman C hide() işlem ile başlangıçta gizli ile gösterir. Biz UI olay ortaya çıktığında, o zaman show() C hide(). Ancak, bu B boyutu değiştiği nasıl işleyeceğini anlamadım. Ayrıca dayanır o zaman görünüşe göre ekleyebilirsiniz birden fazla parça için aynı kap, ve ben emin değilim olup olmadığına bakılır güvenilir davranış üzerinde uzun süreli (ayrıca olmalıdır findFragmentById() ama bununla yaşayabilirim).


Yazarın this blog post gösteren Gmail değil kullanarak setCustomAnimations() hiç, ama onun yerine doğrudan kullanan bir nesne çizer ("hiç değişmeyeceksin sol kenar boşluğu kök görünümünü değiştirmek genişliği sağ görünümü"). Ancak, bu hala iki parça çözüm AFAİCT ve uygulaması bir kez daha sert teller boyutlarını piksel cinsinden gösterilir.


Ben devam takmayı uzakta bu yüzden ben rüzgar cevap bu kendimi bir gün, ama ben gerçekten umut biri vardır yaradı üç parça çözüm için bu animasyon senaryo ve posta kodunu (veya bir bağlantı bunlara). Android animasyonlar benim saç dışarı çekmek istiyorum, ve beni görmüş olanlar bu büyük ölçüde sonuçsuz bir çaba olduğunu biliyorum.

Şimdiden teşekkürler!

CEVAP
7 EYLÜL 2012, Cuma


github teklifimi karşıya (Tüm android sürümleri ile çalışıyor donanım hızlandırması kuvvetle animasyonlar bu tür için tavsiye edilir rağmen. Olmayan donanım hızlandırılmış cihazlar için bitmap önbelleğe alma uygulaması daha uygun)

Animasyon Here ile Demo video (Yavaş kare hızı neden ekran attı. Gerçek performans çok hızlı)


Kullanımı:

layout = new ThreeLayout(this, 3);
layout.setAnimationDuration(1000);
setContentView(layout);
layout.getLeftView();   //<---inflate FragmentA here
layout.getMiddleView(); //<---inflate FragmentB here
layout.getRightView();  //<---inflate FragmentC here

//Left Animation set
layout.startLeftAnimation();

//Right Animation set
layout.startRightAnimation();

//You can even set interpolators

Açıklama:

Özel RelativeLayout(ThreeLayout) ve 2 özel Animasyonlar(MyScalAnimation, MyTranslateAnimation) yeni oluşturulan

ThreeLayout param olarak sol bölmenin ağırlığı ,diğer görünür görünümü weight=1 sahipse alır.

new ThreeLayout(context,3) 3 çocuk ile yeni bir görünüm ve toplam ekranın 1/3 ile sol bölme oluşturur. Diğer görünüm tüm kullanılabilir alanı kaplar.

Çalışma zamanında,güvenli bir uygulama boyutları beraberlik içinde ilk kez hesaplanacak olmasıdır genişliği hesaplar(). yerine post()

Ölçek ve Tercüme animasyonlar aslında ve görünümü yeniden boyutlandırmak taşımak ve pseudo-[ölçek,hareket] .FillAfter(true) her yerde kullanılır dikkat edin.

View2 right_of View1

ve

View3 right_of View2

RelativeLayout bu kurallar kümesi olan başka her şeyi halleder. Animasyonlar ölçekte margins (hareket) ve [width,height] alter

Her bir alt Parça ile bunu artırabilir arayabilirsiniz. (yani erişmek için

public FrameLayout getLeftLayout() {}

public FrameLayout getMiddleLayout() {}

public FrameLayout getRightLayout() {}

Aşağıda 2 animasyonları gösterdi


Aşama1

---Ekran------------!---DIŞARI----

[View1] [__________ View2][__________View3]

Stage2

DIŞARI-!------- ---Ekran------

[View1][View2] [__________ View3]

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • George McCarron

    George McCar

    29 Mayıs 2013
  • Majestic Casual

    Majestic Cas

    28 NİSAN 2012
  • SellerDp

    SellerDp

    27 EKİM 2009