Soru Google plus / Google gazete bayii gibi kaydırmada geridönüşüm gösterme nasıl yapılır?


Nasıl canlandırırım RecyclerView Öğeler ilk kez göründüğünde ve kullanıcı kaydırdığında, tıpkı google plus uygulamasında veya google haber standı uygulamasında olduğu gibi.

Ayrıca bir yere okudum RecyclerView kullanıcı kaydırdığında animasyonu doğrudan desteklemez; eğer bu doğruysa, hala yapabileceğimiz bir yol var mı?


26
2018-01-27 22:33


Menşei




Cevaplar:


Ben bu şekilde yaptım. Birisine yardım edebilirim. Bunu yapmanın en iyi yolu olup olmadığını bilmiyorum ama benim için iyi çalışıyor.

GÜNCELLEŞTİRME:  Hızlı kaydırma davranışını düzeltmek için geçersiz kıl onViewDetachedFromWindow Bağdaştırıcı ve çağrı yöntemi clearAnimation animasyonlu görünümde (bu durumda, holder.itemView.clearAnimation() ).Bunun gibi:

@Override
public void onViewDetachedFromWindow(ViewHolder holder) {
    super.onViewDetachedFromWindow(holder);
    holder.itemView.clearAnimation();
}

up_from_bottom.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
 android:shareInterpolator="@android:anim/decelerate_interpolator">
<translate
    android:fromXDelta="0%" android:toXDelta="0%"
    android:fromYDelta="100%" android:toYDelta="0%"
    android:duration="400" />
</set>

down_from_top.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
 android:shareInterpolator="@android:anim/decelerate_interpolator">
<translate
    android:fromXDelta="0%" android:toXDelta="0%"
    android:fromYDelta="-100%" android:toYDelta="0%"
    android:duration="400" />
</set>

Ve sonunda bu kodu onBindViewHolder arasında recyclerView. LastPosition adlı bir alan oluşturun ve -1'e sıfırlayın.

Animation animation = AnimationUtils.loadAnimation(context,
            (position > lastPosition) ? R.anim.up_from_bottom
                    : R.anim.down_from_top);
    holder.itemView.startAnimation(animation);
    lastPosition = position;

63
2018-04-18 07:06



Hızlı ilerlemek için herhangi bir yol var mı? - naiyu
@naiyu Maalesef bunun hakkında hiçbir fikrim yok. - Vineet Ashtekar
Hızlı kaydırma davranışını düzeltmek için onViewDetachedFromWindow adaptör ve çağrı üzerine clearAnimation animasyonlu görünümde (senin durumunda, holder.itemView). - Thomas Keller
Çalışıyor .. Ama tembel yükleme ile kullandığımızda düzgün değil .. Başka alternatif var mı? - Aditi Parikh
Çalışıyor! Sonsuz kaydırma ile küçük bir sorunla karşı karşıya kaldım. Animasyonu ilk konumda çalıştırmamak suretiyle çözme. - Mete


Eylem eklemek için "slide up" animasyonuyla özel ItemAnimator'ı kullanın. Bunun gibi - https://github.com/wasabeef/recyclerview-animators


4
2018-01-27 23:16



Sadece Ekle'yi istemiyorum, ilk kez animasyonu istiyorum (alttan kaydır) ve ayrıca kullanıcı kaydırdığında - T_C
Eklemek veya kaydırmak için 2 şekilde kullanabilirsiniz. - catalin87
@ catalin87 kaydırma için nasıl kullanılır? - helloimyourmind
@Vineet tarafından gönderilen cevap tatmin edici. Bu kütüphaneyi sevmedim. - TheOnlyAnil


Down_from_top.xml için olmalı

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
 android:shareInterpolator="@android:anim/decelerate_interpolator">
<translate
    android:fromXDelta="0%" android:toXDelta="0%"
    android:fromYDelta="-100%" android:toYDelta="0%"
    android:duration="400" />
</set>

2
2018-06-06 04:27





https://github.com/wasabeef/recyclerview-animators

Benim kodumda şöyle bir şey var:

import jp.wasabeef.recyclerview.animators.adapters.AlphaInAnimationAdapter;

....

public function populate() {
   // Get your recicleview
   rv = (RecyclerView)findViewById(R.id.rv);
   rv.setHasFixedSize(true);

   // Populate your cursor with your own method...
   Cursor myRecycleItems= null;
   myRecycleItems= mDbHelper.getItems();

   //create your 
   itemsAdapter= new ItemsAdapter(myRecycleItems, getApplicationContext());


   //Finnaly apply your adapter to RV with AlphaInAnimationAdapter:
   rv.setAdapter(new AlphaInAnimationAdapter(itemsAdapter));

}

Bağlantınıza bağımlılıklar eklemeniz gerekiyor

dependencies {
  // jCenter
  ...... 
  your curent dependencies 
  ....
  compile 'jp.wasabeef:recyclerview-animators:2.0.0'
}

Doc formunu oku https://github.com/wasabeef/recyclerview-animators yüklemek için.


1
2017-10-29 10:20



Benim için işe yaramıyor RecyclerView recyclerView = (RecyclerView) rootView.findViewById (R.id.scrollableview); recyclerView.setHasFixedSize (doğru); recyclerView.setLayoutManager (yeni LinearLayoutManager (getActivity ())); recyclerView.setAdapter (yeni SlideInBottomAnimationAdapter (yeni ComplexRecyclerViewAdapter (items))); - Hitesh Sahu
kaydırma yaparken çalışmıyor .. neden? - sanjeev


Herhangi bir dış kütüphane olmadan RecycleView.Adapter yöntemle onBindViewHolder örneğin animasyondaki gibi kullanın:

       if (position>lastAnimatedPosition) {


        //set init transitionY to animate from it
        holder.itemView.setTranslationY(holder.itemView.getHeight());

        //animate to orginal position
        holder.itemView.animate().translationYBy(-  holder.itemView.getHeight()).start();


        lastAnimatedPosition=position;
    }

Yukarıdaki kod, listedeki her satırın altından canlandıracaktır. Animasyon sadece bir kez yapılacak, ancak onBindViewHolder kaydırma üzerinde çalışıyor, böylece listenin ilk kaydırılması animasyon efektiyle olacak.

Çok önemli olan, animasyonu başlatmak için görünümü başlatmaktır.

  holder.itemView.setTranslationY( + Y change);

sonra animasyon orjinal pozisyona geri döner:

 holder.itemView.animate().translationYBy(- Y change).start();

Eğer alfa ihtiyacınız varsa bunu şu şekilde yapın:

 holder.itemView.setAlpha(0);
 holder.itemView.animate().apha(1).start();

0
2017-07-13 17:40