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:
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üzsetCustomAnimations()
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 duyuyorum0
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
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]
Neden yok't örnek, ne derleme aka...
Android - parça işlem Özel Animasyon ç...
Çalışma Soap istemci örnek...
CSS3 Sürekli Döndürmek Animasyon (gibi...
Nasıl HyperLogLog çalışma algoritması ...