2011-11-02 5 views
5

Altta hizalı bir araç çubuğu ve kalan yüksekliği dolduran bir Web Görünümü var. Şimdi onu gizlemek için araç çubuğunu aşağı kaydırmak istiyorum, ve web görüntülemenin yüksekliğini genişletmek ise genişlemelidir. TranslateAnimation kullanarak denedim ama talihsiz bir şekilde araç çubuğunun gerçek konumunu ayarlama değil, sadece içeriği taşındı.Android sürgülü animasyon

<translate xmlns:android="http://schemas.android.com/apk/res/android" 
    android:fromXDelta="0%" 
    android:toXDelta="0%" 
    android:fromYDelta="0%" 
    android:toYDelta="100%" 
    android:duration="700" 
    android:fillAfter="true" /> 

Ve gerçek kod: Burada denedim ne

final View v = findViewById(R.id.browseToolbar); 
Animation animation = AnimationUtils.loadAnimation(someContext, R.anim.toolbar_hide); 
v.startAnimation(animation); 

Bunu nasıl yapabilirim?

cevap

1

Gerçek boyutlandırma animasyonlarını yapmak için bazı kod yazdım. Bir göz atın: yukarıda belirtildiği gibi

http://www.touchlab.co/blog/resize-animation/

Ayrıca düzenli animasyon sınıflar yalnızca üst görünümünde neler etkiler, ben

https://docs.google.com/present/view?id=djqv5kb_187c62jvbf7

Esasen Android animasyon yaptım bir sunum bak. Onları anlamanın anahtarı "gerçek" değildir. Android animasyonunu bir serap olarak düşünün. Oluşturduğum örnek uygulamayı çalıştırırsanız, ölçekli bir animasyon yaptığınızı ve bir düğmeyi küçük yaptığınızı, eğer KULLANILAN düğmenin KULLANILACAĞI dışını tıklarsanız, hala bir düğme tıklaması olarak kaydedildiğini söyleyin. Android animasyonları gerçek sınırları ve boyutları etkilemiyor.

Blog yayınımdaki kod aslında bir ViewGroup.OnHierarchyChangeListener uygular. Öğeler hiyerarşiden eklendiğinde/çıkarıldığında, kapsayıcı fiziksel bir yeniden boyutlandırmayı canlandırır.

+4

http://touchlab.co/blog/resize-animation/ link çalışmıyor – NetStarter

0

Android animasyonunu kullandığınızda, yalnızca görünümün pikselleri kaydırılır. Görünümü gerçekten taşımak için animasyon nesnesine bir animasyon dinleyici eklemeniz ve onAnimationEnd yöntemini geçersiz kılmanız gerekir. Bu yöntemde, görünümü programlı olarak taşımanız gerekir.

AnimationListener animListener = new AnimationListener() { 
    @Override 
    public void onAnimationStart(Animation arg0) {}    
    @Override 
    public void onAnimationRepeat(Animation arg0) {}     
    @Override 
    public void onAnimationEnd(Animation arg0) { 
     Move the view here   
    } 
}; 

animation.setAnimationListener(animListener);