2013-11-03 14 views
5

Bir kullanıcı ekranın alt kısmında bir düğmeyi tıkladığında görüntülenen liste görünümünde gerçekten basit bir liste görünümü oluşturmaya çalışıyorum. İşte görünmelidir nasıl:Bir ekranın altından bir görünümü android üzerinde nasıl "yukarı kaydırabilirim?"

sliding thingy

Ve sadece düğme aşağıdaki listeyi konumlandırmak ve içine her şeyi koymak için RelativeLayout kullanmayı denedim http://jsbin.com/utAQOVA/1/edit

HTML/JS tam uygulanmasını bir sarıcı ve sonra yukarı/aşağı (yukarıdaki JSBin'de olduğu gibi) canlandırın.

Sorun yukarıya doğru kaydırın bile, başlangıçta görünmeyen alt kısmı bir şekilde kırpılmış olmasıdır. Evern, aşağıdaki ekran gösterimi olarak başlangıçta listenin bir bölümünü gösterirsem, alt kısım hareket ettiğinde kırpılır ve sadece başlangıçta görünen kısım görüntülenir.

clipping

Ne animasyon bu tür yapmak için uygun bir yaklaşım olur?

Here's a relevant portion of the layout

Düzenleme: (kabul edilen yanıt yorumlarında) kısa bir tartışmadan sonra ben animasyonlu ve ben sadece ListView yüksekliğini değiştirilir parçası etrafında sarma LinearLayout kaldırarak bu çözdük , bu düğmeye basar.

cevap

4

sorun size doing.- ListView'in kendi düzenini nasıl oluşturduğuna dair bir form oluşturabilir, temelde ekran üzerinde bulunan boyuta sığar ve o parçayı boyar ve ListView'ı Yükseklik veya çok küçük bir yükseklik oluşturduğundan bu yana boyutu korur. İki yaklaşımlar ile bu çözebilir:

  1. basit LinearLayout ile ListView yerini alır - öğeleri listelemek tüm dolu, sen listede birçok öğe yoksa bunu yapacağını - o zaman avantajları Basit bir LinearLayout üzerinden bir ListView'in göz ardı edilebilir.
  2. bir ValueAnimator kullanın ve animasyon ise ListView pozisyonu & height özelliğini güncelleyin.belki gerektiğini setTranslationY kullanarak bu soru için doğru yolu olup olmadığını

    ValueAnimator va = ValueAnimator.ofInt(0, height); 
        va.setDuration(700); 
        va.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { 
         public void onAnimationUpdate(ValueAnimator animation) { 
          Integer value = (Integer) animation.getAnimatedValue(); 
          v.getLayoutParams().height = value.intValue(); 
          v.setTranslationY(-value.intValue()); 
          v.requestLayout(); 
         } 
        }); 
    
    • emin değilim ya: Ben yorum olarak bahsedilen Bir yayından uyarlanmıştır

bir ValueAnimator gibi görünmelidir negatif marginTop değeri kullanın (düzenine bağlı olarak değişir)

+0

altına –

+0

Sadece ValueAnimator'ı kullanırdım, bir örnek için şu konuyu kontrol et: http://stackoverflow.com/questions/11935216/animation-of-height-of-linearlayout-container-with-valueanimator – Raanan

+1

Sanırım sorunu anlıyorum şimdi. Sadece 'ValueAnimator' kullanmak benim app değiştirdik, ama buna yükseklik var değişmez (10000) gibi bazı aptalca keyfi yüksek sayıya' 'ListView' ait heigth' ayarlanmış olsa bile, ancak Y değiştirir konumu. –

0

sen Sen bunu bir animasyon xml kaynak saklarken çalıştırabilirsiniz this.-

<translate xmlns:android="http://schemas.android.com/apk/res/android" 
    android:duration="@android:integer/config_longAnimTime" 
    android:fromYDelta="100%p" 
    android:toYDelta="0" /> 

gibi görünecektir aradığınız animasyon ve

Animation anim = AnimationUtils.loadAnimation(this, R.anim.animId); 
yourView.startAnimation(anim); 
+0

'var animation = new TranslateAnimation (0, 0, -600, 0); animation.Duration = 1000; animation.FillAfter = true; ', aynı şeyi başardı mı? Çünkü bu görünümün alt kısmı hala kırpılmış. –

+0

Mmh düzeninizi xml gönderebilir misiniz? Sanırım göreceliğinizi kesen bir ebeveyn görünümü var. 'SetClipChildren' öğesini yanlış olarak deneyebilirsiniz. Zaten hareket için bir TransitionAnimator kullanıyorum soru – ssantos

+0

Eklendi bağlantı, aynı anda animasyonlar her iki çalıştırmak için ValueAnimator ile _merge_ ki bir yolu var mı? –

İlgili konular