Android Open Source - android-lib-QuickEditLayout Quick Edit Animator






From Project

Back to project page android-lib-QuickEditLayout.

License

The source code is released under:

Apache License

If you think the Android project android-lib-QuickEditLayout listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package net.solutinno.android.animation;
/*w  w w  .  ja  v a2 s.c o  m*/
import android.graphics.Rect;
import android.support.v4.view.GestureDetectorCompat;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.widget.AbsListView;

import com.nineoldandroids.animation.Animator;
import com.nineoldandroids.animation.AnimatorSet;
import com.nineoldandroids.animation.ObjectAnimator;

import net.solutinno.util.ViewHelper;

public class QuickEditAnimator implements View.OnTouchListener, AbsListView.OnScrollListener {

    private final View mView;
    private final Rect mRect;
    private final GestureDetectorCompat mGesture;

    float mTranslation;
    int mPrevFirstVisibleItem;
    boolean mIsAnimating;

    public QuickEditAnimator(View view) {
        mView = view;
        mRect = ViewHelper.getViewRectangle(mView);
        mGesture = new GestureDetectorCompat(view.getContext(), mOnGestureListener);
    }

    public void animate(float distanceY) {
        mTranslation += distanceY > 0 ? (-distanceY) : (-distanceY/2);
        if (distanceY > 0) mTranslation = mTranslation < -mRect.height() ? -mRect.height() : mTranslation;
        else if (distanceY < 0) mTranslation = mTranslation > 0 ? 0 : mTranslation;

        AnimatorSet set = new AnimatorSet();
        set.setDuration(0);
        set.playTogether(
            ObjectAnimator.ofInt(mView, "top", (int) mTranslation).setDuration(0),
            ObjectAnimator.ofInt(mView, "bottom", mRect.height() + (int) mTranslation).setDuration(0)
        );
        set.start();
    }

    public void collapse(long duration) {
        if (mIsAnimating) return;
        mTranslation = 0;
        mIsAnimating = true;
        AnimatorSet set = new AnimatorSet();
        set.setDuration(duration);
        set.addListener(new AnimationListenerImp() {
            @Override
            public void onAnimationEnd(Animator animator) {
                mIsAnimating = false;
            }
        });
        set.playTogether(
            ObjectAnimator.ofInt(mView, "top", -mRect.height()),
            ObjectAnimator.ofInt(mView, "bottom", 0)
        );
        set.start();
    }

    public void expand(long duration) {
        if (mIsAnimating) return;
        mTranslation = 0;
        mIsAnimating = true;
        AnimatorSet set = new AnimatorSet();
        set.setDuration(duration);
        set.addListener(new AnimationListenerImp() {
            @Override
            public void onAnimationEnd(Animator animator) {
                mIsAnimating = false;
            }
        });
        set.playTogether(
            ObjectAnimator.ofInt(mView, "top", 0),
            ObjectAnimator.ofInt(mView, "bottom", mRect.height())
        );
        set.start();
    }

    @Override
    public boolean onTouch(View view, MotionEvent motionEvent) {
        return mGesture.onTouchEvent(motionEvent);
    }

    GestureDetector.SimpleOnGestureListener mOnGestureListener = new GestureDetector.SimpleOnGestureListener() {
        @Override
        public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
            animate(distanceY);
            return super.onScroll(e1, e2, distanceX, distanceY);
        }
    };

    @Override
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
        if (firstVisibleItem == 0 && visibleItemCount == totalItemCount) {
            expand(500);
        }
        else {
            if (firstVisibleItem > 0) {
                if (mPrevFirstVisibleItem - firstVisibleItem > 0) expand(500);
                else if (mPrevFirstVisibleItem - firstVisibleItem < 0) collapse(500);
            }
        }
        mPrevFirstVisibleItem = firstVisibleItem;
    }

    @Override
    public void onScrollStateChanged(AbsListView view, int scrollState) {

    }
}




Java Source Code List

net.solutinno.android.animation.AnimationListenerImp.java
net.solutinno.android.animation.QuickEditAnimator.java
net.solutinno.android.widget.QuickEditLayout.java