Анимация возвышения тени в карточке в recyclerview

Я хочу cardview elevation анимацию точно так же, как Google делает анимацию "PlayGames". Вот пример gif анимации. Может ли кто-нибудь помочь мне, как это сделать, или сослаться на любую библиотеку.

пример GIF-анимации

Спасибо


person Hitesh Bisht    schedule 11.12.2017    source источник
comment
эта библиотека может помочь github.com/wasabeef/recyclerview-animators   -  person Mohamed Mohaideen AH    schedule 11.12.2017


Ответы (1)


Как это сделать? Использование Viewpager и Shadow Transform

1- создайте PagerAdapter для просмотра карт

2- внутри адаптера в методе instantiateItem установить высоту карты вот так

 CardView cardView = (CardView) view.findViewById(R.id.cardView);

        if (mBaseElevation == 0) {
            mBaseElevation = cardView.getCardElevation();
        }

        cardView.setMaxCardElevation(mBaseElevation * MAX_ELEVATION_FACTOR);
        mViews.set(position, cardView);
        return view;

после этого реализовать ViewPager.OnPageChangeListener внутри onPageScrolled

        if (currentCard != null) {
            if (mScalingEnabled) {
                currentCard.setScaleX((float) (1 + 0.1 * (1 - realOffset)));
                currentCard.setScaleY((float) (1 + 0.1 * (1 - realOffset)));
            }
            currentCard.setCardElevation((baseElevation + baseElevation
                    * (CardAdapter.MAX_ELEVATION_FACTOR - 1) * (1 - realOffset)));
        }

        CardView nextCard = mAdapter.getCardViewAt(nextPosition);

        // We might be scrolling fast enough so that the next (or previous) card
        // was already destroyed or a fragment might not have been created yet
        if (nextCard != null) {
            if (mScalingEnabled) {
                nextCard.setScaleX((float) (1 + 0.1 * (realOffset)));
                nextCard.setScaleY((float) (1 + 0.1 * (realOffset)));
            }
            nextCard.setCardElevation((baseElevation + baseElevation
                    * (CardAdapter.MAX_ELEVATION_FACTOR - 1) * (realOffset)));
        }

полный код ViewPagerCards

если вы хотите сделать это, используя RecyclerView
, вы можете получить средний элемент и проверить onBindViewHolder, если этот элемент является средним элементом, затем выполните анимацию масштабирования, чтобы узнать, чтобы получить средний, проверьте этот ответ: Получить центральный видимый элемент RecycleView при прокрутке

person tamtom    schedule 11.12.2017
comment
это решение работает хорошо, но я могу прокручивать только одну позицию за раз с помощью viewpager. Я не могу справиться с броском, поэтому я хотел сделать это с recyclerview - person Hitesh Bisht; 11.12.2017
comment
@HiteshBisht Я обновил ответ, чтобы он работал с RececlerView, дайте мне знать, если это помогло вам! - person tamtom; 11.12.2017
comment
Я уже делаю это, используя класс SnapHelper в Android, но теперь я также хочу, чтобы масштабирование и высота работали, пока пользователь прокручивает, как показано в образце GIF. Спасибо - person Hitesh Bisht; 12.12.2017
comment
Вы можете выполнить масштабирование и повышение высоты в bindview с кодом карты выше, чего не хватает? - person tamtom; 12.12.2017