card-printer

Pull down to refresh - card printer

Github stars Tracking Chart

PULL DOWN TO REFRESH - CARD PRINTER

Android implementation of the following dribble shot:

https://dribbble.com/shots/3031884-Pull-to-Refresh-Printer

Download .apk file at:

https://www.dropbox.com/s/bm7ja5cwt2dtsgx/refresh.apk?dl=0

Card printer demo

Checking the condition for refresh inside the onTouchListener:

if (mLinearLayoutManager.findFirstCompletelyVisibleItemPosition() <= 0
    && mDeltaY >= PULL_DOWN_THRESHOLD && !mIsRefreshing && mProgressCount >= 100
    && !canScrollUp() && mRecyclerView.getTranslationY() != 0) {
    mShouldAnimateCard = true;
    mPreviousY = mDeltaY = 0;
    mIsRefreshing = true;
    mRecyclerView.scrollToPosition(0);
    mCardsList.add(0, true);
    mRecyclerAdapter.notifyItemInserted(0);
    mRecyclerView.scrollToPosition(0);
    mYellowLight = true;
    animatePrinter();
}

Printer knob animation to print the card:

TranslateAnimation knobAnimation = new TranslateAnimation(0.0f, dpToPx(30),
                    0.0f, 0.0f);
            knobAnimation.setDuration(150);
            knobAnimation.setRepeatCount(5);
            knobAnimation.setRepeatMode(2);
            knobAnimation.setInterpolator(new LinearInterpolator());
            mPrinterKnob.startAnimation(knobAnimation);
            mPrinterCard.setVisibility(View.VISIBLE);
            mPrinterCard.animate()
                    .setDuration(1200)
                    .setInterpolator(new LinearInterpolator())
                    .translationY(dpToPx(10))
                    .setListener(new Animator.AnimatorListener() {
                        @Override
                        public void onAnimationStart(Animator animation) {
                        }

                        @Override
                        public void onAnimationEnd(Animator animation) {
                        	//Reset the animation
                            mPrinter.animate()
                                    .setDuration(300)
                                    .setInterpolator(new LinearInterpolator())
                                    .translationY(-dpToPx(100))
                                    .start();
                            mPrinterKnob.animate()
                                    .setDuration(300)
                                    .setInterpolator(new LinearInterpolator())
                                    .translationY(-dpToPx(100))
                                    .start();
                            mPrinterLight.animate()
                                    .setDuration(300)
                                    .setInterpolator(new LinearInterpolator())
                                    .translationY(-dpToPx(100))
                                    .start();
                            mPrinterCard.setVisibility(GONE);
                            mPrinterCard.setTranslationY(-dpToPx(40));
                            mPrinterCard.setVisibility(View.VISIBLE);
                            mPrinter.clearAnimation();
                            mPrinterKnob.clearAnimation();
                            mPrinterCard.clearAnimation();
                        }

                        @Override
                        public void onAnimationCancel(Animator animation) {

                        }

                        @Override
                        public void onAnimationRepeat(Animator animation) {

                        }
                    })
            		.start();

Scale animation:

<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="300"
    android:fromXScale="0.8"
    android:fromYScale="-1.0"
    android:interpolator="@android:interpolator/accelerate_decelerate"
    android:pivotX="50%"
    android:pivotY="15%"
    android:toXScale="1"
    android:toYScale="1" />

Flipping the card during the scale animation:

mFlipAnimation = AnimationUtils.loadAnimation(viewHolder.itemView.getContext(), R.anim.scale_anim);

        mFlipAnimation.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {
                Handler handler = new Handler();
                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        mCardBack.setVisibility(View.VISIBLE);
                        mCardFront.setVisibility(View.GONE);
                    }
                }, 150);
            }

            @Override
            public void onAnimationEnd(Animation animation) {
                mCardFront.clearAnimation();
                mCardBack.clearAnimation();
                ((MainActivity) mActivity).mIsRefreshing = false;
                ((MainActivity) mActivity).resetProgress();
                mCardFront.setVisibility(View.INVISIBLE);
            }

            @Override
            public void onAnimationRepeat(Animation animation) {
            }
        });

Thank you Saptarshi Prakash for the innovative animation!

Main metrics

Overview
Name With OwnerCameraKit/blurkit-android
Primary LanguageJava
Program languageJava (Language Count: 1)
Platform
License:MIT License
所有者活动
Created At2016-11-06 03:14:58
Pushed At2021-04-03 23:18:57
Last Commit At2019-01-21 15:39:03
Release Count3
Last Release Namev1.1.1 (Posted on )
First Release Namev1.0.0 (Posted on )
用户参与
Stargazers Count3.8k
Watchers Count74
Fork Count314
Commits Count86
Has Issues Enabled
Issues Count71
Issue Open Count33
Pull Requests Count10
Pull Requests Open Count4
Pull Requests Close Count7
项目设置
Has Wiki Enabled
Is Archived
Is Fork
Is Locked
Is Mirror
Is Private