List of usage examples for android.support.v4.view ViewPropertyAnimatorListener ViewPropertyAnimatorListener
ViewPropertyAnimatorListener
From source file:com.kozhevin.example.carousel.CarouselItemAnimator.java
private void animateRemoveImpl(final ViewHolder pHolder) { final View view = pHolder.itemView; ViewCompat.animate(view).cancel();/*from w ww . j a va 2s . c om*/ if (getTranslationValueY() != 0 && mIsUseTranslationAnimation) { ViewPropertyAnimatorCompat lViewPropertyAnimatorCompat = ViewCompat.animate(view); lViewPropertyAnimatorCompat.setDuration(350); lViewPropertyAnimatorCompat.translationY(getTranslationValueY()); lViewPropertyAnimatorCompat.setListener(new ViewPropertyAnimatorListener() { @Override public void onAnimationStart(View arg0) { } @Override public void onAnimationEnd(View arg0) { animateAlhaRemove(view, pHolder); } @Override public void onAnimationCancel(View arg0) { } }); ViewCompat.animate(view).start(); } else { if (mIsUseTranslationAnimation) { view.setAlpha(0f); mIsUseTranslationAnimation = true; } animateAlhaRemove(view, pHolder); } mRemoveAnimations.add(pHolder); }
From source file:com.example.android.supportv7.widget.AnimatedRecyclerView.java
private RecyclerView.ItemAnimator createAnimator() { return new DefaultItemAnimator() { List<ItemChangeAnimator> mPendingChangeAnimations = new ArrayList<>(); ArrayMap<RecyclerView.ViewHolder, ItemChangeAnimator> mRunningAnimations = new ArrayMap<>(); ArrayMap<MyViewHolder, Long> mPendingSettleList = new ArrayMap<>(); @Override/*from w w w .j a va 2s . co m*/ public void runPendingAnimations() { super.runPendingAnimations(); for (ItemChangeAnimator anim : mPendingChangeAnimations) { anim.start(); mRunningAnimations.put(anim.mViewHolder, anim); } mPendingChangeAnimations.clear(); for (int i = mPendingSettleList.size() - 1; i >= 0; i--) { final MyViewHolder vh = mPendingSettleList.keyAt(i); final long duration = mPendingSettleList.valueAt(i); ViewCompat.animate(vh.textView).translationX(0f).alpha(1f).setDuration(duration) .setListener(new ViewPropertyAnimatorListener() { @Override public void onAnimationStart(View view) { dispatchAnimationStarted(vh); } @Override public void onAnimationEnd(View view) { ViewCompat.setTranslationX(vh.textView, 0f); ViewCompat.setAlpha(vh.textView, 1f); dispatchAnimationFinished(vh); } @Override public void onAnimationCancel(View view) { } }).start(); } mPendingSettleList.clear(); } @Override public ItemHolderInfo recordPreLayoutInformation(RecyclerView.State state, RecyclerView.ViewHolder viewHolder, @AdapterChanges int changeFlags, List<Object> payloads) { MyItemInfo info = (MyItemInfo) super.recordPreLayoutInformation(state, viewHolder, changeFlags, payloads); info.text = ((MyViewHolder) viewHolder).textView.getText(); return info; } @Override public ItemHolderInfo recordPostLayoutInformation(RecyclerView.State state, RecyclerView.ViewHolder viewHolder) { MyItemInfo info = (MyItemInfo) super.recordPostLayoutInformation(state, viewHolder); info.text = ((MyViewHolder) viewHolder).textView.getText(); return info; } @Override public boolean canReuseUpdatedViewHolder(RecyclerView.ViewHolder viewHolder) { return mEnableInPlaceChange; } @Override public void endAnimation(RecyclerView.ViewHolder item) { super.endAnimation(item); for (int i = mPendingChangeAnimations.size() - 1; i >= 0; i--) { ItemChangeAnimator anim = mPendingChangeAnimations.get(i); if (anim.mViewHolder == item) { mPendingChangeAnimations.remove(i); anim.setFraction(1f); dispatchChangeFinished(item, true); } } for (int i = mRunningAnimations.size() - 1; i >= 0; i--) { ItemChangeAnimator animator = mRunningAnimations.get(item); if (animator != null) { animator.end(); mRunningAnimations.removeAt(i); } } for (int i = mPendingSettleList.size() - 1; i >= 0; i--) { final MyViewHolder vh = mPendingSettleList.keyAt(i); if (vh == item) { mPendingSettleList.removeAt(i); dispatchChangeFinished(item, true); } } } @Override public boolean animateChange(RecyclerView.ViewHolder oldHolder, RecyclerView.ViewHolder newHolder, ItemHolderInfo preInfo, ItemHolderInfo postInfo) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB_MR1 || oldHolder != newHolder) { return super.animateChange(oldHolder, newHolder, preInfo, postInfo); } return animateChangeApiHoneycombMr1(oldHolder, newHolder, preInfo, postInfo); } @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR1) private boolean animateChangeApiHoneycombMr1(RecyclerView.ViewHolder oldHolder, RecyclerView.ViewHolder newHolder, ItemHolderInfo preInfo, ItemHolderInfo postInfo) { endAnimation(oldHolder); MyItemInfo pre = (MyItemInfo) preInfo; MyItemInfo post = (MyItemInfo) postInfo; MyViewHolder vh = (MyViewHolder) oldHolder; CharSequence finalText = post.text; if (pre.text.equals(post.text)) { // same content. Just translate back to 0 final long duration = (long) (getChangeDuration() * (ViewCompat.getTranslationX(vh.textView) / vh.textView.getWidth())); mPendingSettleList.put(vh, duration); // we set it here because previous endAnimation would set it to other value. vh.textView.setText(finalText); } else { // different content, get out and come back. vh.textView.setText(pre.text); final ItemChangeAnimator anim = new ItemChangeAnimator(vh, finalText, getChangeDuration()) { @Override public void onAnimationEnd(Animator animation) { setFraction(1f); dispatchChangeFinished(mViewHolder, true); } @Override public void onAnimationStart(Animator animation) { dispatchChangeStarting(mViewHolder, true); } }; mPendingChangeAnimations.add(anim); } return true; } @Override public ItemHolderInfo obtainHolderInfo() { return new MyItemInfo(); } }; }
From source file:com.lll.core.learn.AnimatedRecyclerView.java
private RecyclerView.ItemAnimator createAnimator() { return new DefaultItemAnimator() { List<ItemChangeAnimator> mPendingChangeAnimations = new ArrayList<>(); ArrayMap<RecyclerView.ViewHolder, ItemChangeAnimator> mRunningAnimations = new ArrayMap<>(); ArrayMap<MyViewHolder, Long> mPendingSettleList = new ArrayMap<>(); @Override/*from ww w . j ava 2 s. c om*/ public void runPendingAnimations() { super.runPendingAnimations(); for (ItemChangeAnimator anim : mPendingChangeAnimations) { anim.start(); mRunningAnimations.put(anim.mViewHolder, anim); } mPendingChangeAnimations.clear(); for (int i = mPendingSettleList.size() - 1; i >= 0; i--) { final MyViewHolder vh = mPendingSettleList.keyAt(i); final long duration = mPendingSettleList.valueAt(i); ViewCompat.animate(vh.textView) //View .translationX(0f) //x?? .alpha(1f)//? .setDuration(duration)// .setListener(//? new ViewPropertyAnimatorListener() { @Override public void onAnimationStart(View view) { dispatchAnimationStarted(vh);//RecycleView } @Override public void onAnimationEnd(View view) { ViewCompat.setTranslationX(vh.textView, 0f); ViewCompat.setAlpha(vh.textView, 1f); dispatchAnimationFinished(vh);//RecycleView } @Override public void onAnimationCancel(View view) { } }) .start();// } mPendingSettleList.clear(); } @Override public ItemHolderInfo recordPreLayoutInformation(RecyclerView.State state, RecyclerView.ViewHolder viewHolder, @AdapterChanges int changeFlags, List<Object> payloads) { MyItemInfo info = (MyItemInfo) super.recordPreLayoutInformation(state, viewHolder, changeFlags, payloads); info.text = ((MyViewHolder) viewHolder).textView.getText(); return info; } @Override public ItemHolderInfo recordPostLayoutInformation(RecyclerView.State state, RecyclerView.ViewHolder viewHolder) { MyItemInfo info = (MyItemInfo) super.recordPostLayoutInformation(state, viewHolder); info.text = ((MyViewHolder) viewHolder).textView.getText(); return info; } @Override public boolean canReuseUpdatedViewHolder(RecyclerView.ViewHolder viewHolder) { return mEnableInPlaceChange; } @Override public void endAnimation(RecyclerView.ViewHolder item) { super.endAnimation(item); for (int i = mPendingChangeAnimations.size() - 1; i >= 0; i--) { ItemChangeAnimator anim = mPendingChangeAnimations.get(i); if (anim.mViewHolder == item) { mPendingChangeAnimations.remove(i); anim.setFraction(1f); dispatchChangeFinished(item, true); } } for (int i = mRunningAnimations.size() - 1; i >= 0; i--) { ItemChangeAnimator animator = mRunningAnimations.get(item); if (animator != null) { animator.end(); mRunningAnimations.removeAt(i); } } for (int i = mPendingSettleList.size() - 1; i >= 0; i--) { final MyViewHolder vh = mPendingSettleList.keyAt(i); if (vh == item) { mPendingSettleList.removeAt(i); dispatchChangeFinished(item, true); } } } @Override public boolean animateChange(RecyclerView.ViewHolder oldHolder, RecyclerView.ViewHolder newHolder, ItemHolderInfo preInfo, ItemHolderInfo postInfo) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB_MR1 || oldHolder != newHolder) { return super.animateChange(oldHolder, newHolder, preInfo, postInfo); } return animateChangeApiHoneycombMr1(oldHolder, newHolder, preInfo, postInfo); } @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR1) private boolean animateChangeApiHoneycombMr1(RecyclerView.ViewHolder oldHolder, RecyclerView.ViewHolder newHolder, ItemHolderInfo preInfo, ItemHolderInfo postInfo) { endAnimation(oldHolder); MyItemInfo pre = (MyItemInfo) preInfo; MyItemInfo post = (MyItemInfo) postInfo; MyViewHolder vh = (MyViewHolder) oldHolder; CharSequence finalText = post.text; if (pre.text.equals(post.text)) { // same content. Just translate back to 0 final long duration = (long) (getChangeDuration() * (ViewCompat.getTranslationX(vh.textView) / vh.textView.getWidth())); mPendingSettleList.put(vh, duration); // we set it here because previous endAnimation would set it to other value. vh.textView.setText(finalText); } else { // different content, get out and come back. vh.textView.setText(pre.text); final ItemChangeAnimator anim = new ItemChangeAnimator(vh, finalText, getChangeDuration()) { @Override public void onAnimationEnd(Animator animation) { setFraction(1f); dispatchChangeFinished(mViewHolder, true); } @Override public void onAnimationStart(Animator animation) { dispatchChangeStarting(mViewHolder, true); } }; mPendingChangeAnimations.add(anim); } return true; } @Override public ItemHolderInfo obtainHolderInfo() { return new MyItemInfo(); } }; }
From source file:com.events.events.features.welcome.auth.LoginFragment.java
@Override public void showNextSlide() { AnimUtils.animteViewsOut(new ViewPropertyAnimatorListener() { @Override/*www. j av a 2s .co m*/ public void onAnimationStart(View view) { } @Override public void onAnimationEnd(View view) { ((WelcomeActivity) getActivity()).nextSlide(); } @Override public void onAnimationCancel(View view) { } }, mLoginImage, mLoginWithAccountTitle, mEmailLayout, mPasswordLayout, mDontHaveAnAccount, mLoginButton); }
From source file:com.tsoliveira.android.listeners.DragDropTouchListener.java
private void reset() { //Animate mobile view back to original position final View originalView = getViewByPosition(mobileViewCurrentPos); if (originalView != null && mobileView != null) { float y = getViewRawCoords(originalView)[1]; mobileView.animate().y(y).setDuration(MOVE_DURATION).setListener(new AnimatorListenerAdapter() { @Override//from w ww . j av a 2s .co m public void onAnimationEnd(Animator animation) { if (mobileView != null) { ViewCompat.animate(mobileView).z(ViewCompat.getZ(originalView)).setDuration(MOVE_DURATION) .setListener(new ViewPropertyAnimatorListener() { @Override public void onAnimationStart(View view) { } @Override public void onAnimationEnd(View view) { originalView.setVisibility(View.VISIBLE); ViewGroup parent = (ViewGroup) mobileView.getParent(); parent.removeView(mobileView); mobileView = null; } @Override public void onAnimationCancel(View view) { } }).start(); } } }); } dragging = false; mobileViewStartY = -1; mobileViewCurrentPos = -1; }
From source file:com.brandon.mailbox.RecyclerSwipeListener.java
private boolean handleTouchEvent(MotionEvent motionEvent) { if (mViewWidth < 2) { mViewWidth = mRecyclerView.getWidth(); }/* w w w . ja v a2s. c o m*/ switch (motionEvent.getActionMasked()) { case MotionEvent.ACTION_DOWN: { if (mPaused) { break; } // Find the child view that was touched (perform a hit test) Rect rect = new Rect(); int childCount = mRecyclerView.getChildCount(); int[] listViewCoords = new int[2]; mRecyclerView.getLocationOnScreen(listViewCoords); int x = (int) motionEvent.getRawX() - listViewCoords[0]; int y = (int) motionEvent.getRawY() - listViewCoords[1]; View child; for (int i = 0; i < childCount; i++) { child = mRecyclerView.getChildAt(i); child.getHitRect(rect); if (rect.contains(x, y)) { mDownView = child; break; } } if (mDownView != null && mAnimatingPosition != mRecyclerView.getChildLayoutPosition(mDownView)) { mAlpha = ViewCompat.getAlpha(mDownView); mDownX = motionEvent.getRawX(); mDownY = motionEvent.getRawY(); mDownPosition = mRecyclerView.getChildLayoutPosition(mDownView); mSwipingLeft = mSwipeListener.canSwipeLeft(mDownPosition); mSwipingRight = mSwipeListener.canSwipeRight(mDownPosition); if (mSwipingLeft || mSwipingRight) { mVelocityTracker = VelocityTracker.obtain(); mVelocityTracker.addMovement(motionEvent); } else { mDownView = null; } } break; } case MotionEvent.ACTION_CANCEL: { if (mVelocityTracker == null) { break; } if (mDownView != null && mSwiping) { // cancel ViewCompat.animate(mDownView).translationX(0).alpha(mAlpha).setDuration(mAnimationTime) .setListener(null); } mVelocityTracker.recycle(); mVelocityTracker = null; mDownX = 0; mDownY = 0; mDownView = null; mDownPosition = ListView.INVALID_POSITION; mSwiping = false; break; } case MotionEvent.ACTION_UP: { if (mVelocityTracker == null) { break; } mFinalDelta = motionEvent.getRawX() - mDownX; mVelocityTracker.addMovement(motionEvent); mVelocityTracker.computeCurrentVelocity(1000); float velocityX = mVelocityTracker.getXVelocity(); float absVelocityX = Math.abs(velocityX); float absVelocityY = Math.abs(mVelocityTracker.getYVelocity()); boolean dismiss = false; boolean dismissRight = false; if (Math.abs(mFinalDelta) > mViewWidth / 2 && mSwiping) { dismiss = true; dismissRight = mFinalDelta > 0; } else if (mMinFlingVelocity <= absVelocityX && absVelocityX <= mMaxFlingVelocity && absVelocityY < absVelocityX && mSwiping) { // dismiss only if flinging in the same direction as dragging dismiss = (velocityX < 0) == (mFinalDelta < 0); dismissRight = mVelocityTracker.getXVelocity() > 0; } if (dismiss && mDownPosition != mAnimatingPosition && mDownPosition != ListView.INVALID_POSITION) { // dismiss final View downView = mDownView; // mDownView gets null'd before animation ends final int downPosition = mDownPosition; ++mDismissAnimationRefCount; mAnimatingPosition = mDownPosition; ViewCompat.animate(mDownView).translationX(dismissRight ? mViewWidth : -mViewWidth).alpha(0) .setDuration(mAnimationTime).setListener(new ViewPropertyAnimatorListener() { @Override public void onAnimationStart(View view) { // Do nothing. } @Override public void onAnimationEnd(View view) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { performDismiss(downView, downPosition); } } @Override public void onAnimationCancel(View view) { // Do nothing. } }); } else { // cancel ViewCompat.animate(mDownView).translationX(0).alpha(mAlpha).setDuration(mAnimationTime) .setListener(null); } mVelocityTracker.recycle(); mVelocityTracker = null; mDownX = 0; mDownY = 0; mDownView = null; mDownPosition = ListView.INVALID_POSITION; mSwiping = false; break; } case MotionEvent.ACTION_MOVE: { if (mVelocityTracker == null || mPaused) { break; } mVelocityTracker.addMovement(motionEvent); float deltaX = motionEvent.getRawX() - mDownX; float deltaY = motionEvent.getRawY() - mDownY; if (!mSwiping && Math.abs(deltaX) > mSlop && Math.abs(deltaY) < Math.abs(deltaX) / 2) { mSwiping = true; mSwipingSlop = (deltaX > 0 ? mSlop : -mSlop); } if (deltaX < 0 && !mSwipingLeft) mSwiping = false; if (deltaX > 0 && !mSwipingRight) mSwiping = false; if (mSwiping) { ViewCompat.setTranslationX(mDownView, deltaX - mSwipingSlop); ViewCompat.setAlpha(mDownView, Math.max(0f, Math.min(mAlpha, mAlpha * (1f - Math.abs(deltaX) / mViewWidth)))); return true; } break; } } return false; }
From source file:br.com.halph.agendafeliz.util.SwipeableRecyclerViewTouchListener.java
private boolean handleTouchEvent(MotionEvent motionEvent) { if (mViewWidth < 2) { mViewWidth = mRecyclerView.getWidth(); }//from w w w. j a va2 s .co m switch (motionEvent.getActionMasked()) { case MotionEvent.ACTION_DOWN: { if (mPaused) { break; } // Find the child view that was touched (perform a hit test) Rect rect = new Rect(); int childCount = mRecyclerView.getChildCount(); int[] listViewCoords = new int[2]; mRecyclerView.getLocationOnScreen(listViewCoords); int x = (int) motionEvent.getRawX() - listViewCoords[0]; int y = (int) motionEvent.getRawY() - listViewCoords[1]; View child; for (int i = 0; i < childCount; i++) { child = mRecyclerView.getChildAt(i); child.getHitRect(rect); if (rect.contains(x, y)) { mDownView = child; break; } } if (mDownView != null && mAnimatingPosition != mRecyclerView.getChildLayoutPosition(mDownView)) { mAlpha = ViewCompat.getAlpha(mDownView); mDownX = motionEvent.getRawX(); mDownY = motionEvent.getRawY(); mDownPosition = mRecyclerView.getChildLayoutPosition(mDownView); mSwipingLeft = mSwipeListener.canSwipeLeft(mDownPosition); mSwipingRight = mSwipeListener.canSwipeRight(mDownPosition); if (mSwipingLeft || mSwipingRight) { mVelocityTracker = VelocityTracker.obtain(); mVelocityTracker.addMovement(motionEvent); } else { mDownView = null; } } break; } case MotionEvent.ACTION_CANCEL: { if (mVelocityTracker == null) { break; } if (mDownView != null && mSwiping) { // cancel ViewCompat.animate(mDownView).translationX(0).alpha(mAlpha).setDuration(mAnimationTime) .setListener(null); } mVelocityTracker.recycle(); mVelocityTracker = null; mDownX = 0; mDownY = 0; mDownView = null; mDownPosition = ListView.INVALID_POSITION; mSwiping = false; break; } case MotionEvent.ACTION_UP: { if (mVelocityTracker == null) { break; } mFinalDelta = motionEvent.getRawX() - mDownX; mVelocityTracker.addMovement(motionEvent); mVelocityTracker.computeCurrentVelocity(1000); float velocityX = mVelocityTracker.getXVelocity(); float absVelocityX = Math.abs(velocityX); float absVelocityY = Math.abs(mVelocityTracker.getYVelocity()); boolean dismiss = false; boolean dismissRight = false; if (Math.abs(mFinalDelta) > mViewWidth / 2 && mSwiping) { dismiss = true; dismissRight = mFinalDelta > 0; } else if (mMinFlingVelocity <= absVelocityX && absVelocityX <= mMaxFlingVelocity && absVelocityY < absVelocityX && mSwiping) { // dismiss only if flinging in the same direction as dragging dismiss = (velocityX < 0) == (mFinalDelta < 0); dismissRight = mVelocityTracker.getXVelocity() > 0; } if (dismiss && mDownPosition != mAnimatingPosition && mDownPosition != ListView.INVALID_POSITION) { // dismiss final View downView = mDownView; // mDownView gets null'd before animation ends final int downPosition = mDownPosition; ++mDismissAnimationRefCount; mAnimatingPosition = mDownPosition; ViewCompat.animate(mDownView).translationX(dismissRight ? mViewWidth : -mViewWidth).alpha(0) .setDuration(mAnimationTime).setListener(new ViewPropertyAnimatorListener() { @Override public void onAnimationStart(View view) { // Do nothing. } @Override public void onAnimationEnd(View view) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { performDismiss(downView, downPosition); } } @Override public void onAnimationCancel(View view) { // Do nothing. } }); } else { // cancel ViewCompat.animate(mDownView).translationX(0).alpha(mAlpha).setDuration(mAnimationTime) .setListener(null); } mVelocityTracker.recycle(); mVelocityTracker = null; mDownX = 0; mDownY = 0; mDownView = null; mDownPosition = ListView.INVALID_POSITION; mSwiping = false; break; } case MotionEvent.ACTION_MOVE: { if (mVelocityTracker == null || mPaused) { break; } mVelocityTracker.addMovement(motionEvent); float deltaX = motionEvent.getRawX() - mDownX; float deltaY = motionEvent.getRawY() - mDownY; if (!mSwiping && Math.abs(deltaX) > mSlop && Math.abs(deltaY) < Math.abs(deltaX) / 2) { mSwiping = true; mSwipingSlop = (deltaX > 0 ? mSlop : -mSlop); } if (deltaX < 0 && !mSwipingLeft) mSwiping = false; if (deltaX > 0 && !mSwipingRight) mSwiping = false; if (mSwiping) { ViewCompat.setTranslationX(mDownView, deltaX - mSwipingSlop); ViewCompat.setAlpha(mDownView, Math.max(0f, Math.min(mAlpha, mAlpha * (1f - Math.abs(deltaX) / mViewWidth)))); return true; } break; } } return false; }
From source file:com.dpg.kodimote.view.SwipeableRecyclerViewTouchListener.java
private boolean handleTouchEvent(MotionEvent motionEvent) { if (mViewWidth < 2) { mViewWidth = mRecyclerView.getWidth(); }/*from ww w. j a va2s .c o m*/ Log.d("Swipe", motionEvent.getActionMasked() + ""); switch (motionEvent.getActionMasked()) { case MotionEvent.ACTION_DOWN: { if (mPaused) { break; } // Find the child view that was touched (perform a hit test) Rect rect = new Rect(); int childCount = mRecyclerView.getChildCount(); int[] listViewCoords = new int[2]; mRecyclerView.getLocationOnScreen(listViewCoords); int x = (int) motionEvent.getRawX() - listViewCoords[0]; int y = (int) motionEvent.getRawY() - listViewCoords[1]; View child; for (int i = 0; i < childCount; i++) { child = mRecyclerView.getChildAt(i); child.getHitRect(rect); if (rect.contains(x, y)) { mDownView = child; break; } } if (mDownView != null && mAnimatingPosition != mRecyclerView.getChildLayoutPosition(mDownView)) { mAlpha = ViewCompat.getAlpha(mDownView); mDownX = motionEvent.getRawX(); mDownY = motionEvent.getRawY(); mDownPosition = mRecyclerView.getChildLayoutPosition(mDownView); mSwipingLeft = mSwipeListener.canSwipeLeft(mDownPosition); mSwipingRight = mSwipeListener.canSwipeRight(mDownPosition); if (mSwipingLeft || mSwipingRight) { mVelocityTracker = VelocityTracker.obtain(); mVelocityTracker.addMovement(motionEvent); } else { mDownView = null; } } break; } case MotionEvent.ACTION_CANCEL: { if (mVelocityTracker == null) { break; } if (mDownView != null && mSwiping) { // cancel ViewCompat.animate(mDownView).translationX(0).alpha(mAlpha).setDuration(mAnimationTime) .setListener(null); } mVelocityTracker.recycle(); mVelocityTracker = null; mDownX = 0; mDownY = 0; mDownView = null; mDownPosition = ListView.INVALID_POSITION; mSwiping = false; break; } case MotionEvent.ACTION_UP: { if (mVelocityTracker == null) { break; } mFinalDelta = motionEvent.getRawX() - mDownX; mVelocityTracker.addMovement(motionEvent); mVelocityTracker.computeCurrentVelocity(1000); float velocityX = mVelocityTracker.getXVelocity(); float absVelocityX = Math.abs(velocityX); float absVelocityY = Math.abs(mVelocityTracker.getYVelocity()); boolean dismiss = false; boolean dismissRight = false; if (Math.abs(mFinalDelta) > mViewWidth / 2 && mSwiping) { dismiss = true; dismissRight = mFinalDelta > 0; } else if (mMinFlingVelocity <= absVelocityX && absVelocityX <= mMaxFlingVelocity && absVelocityY < absVelocityX && mSwiping) { // dismiss only if flinging in the same direction as dragging dismiss = (velocityX < 0) == (mFinalDelta < 0); dismissRight = mVelocityTracker.getXVelocity() > 0; } if (dismiss && mDownPosition != mAnimatingPosition && mDownPosition != ListView.INVALID_POSITION) { // dismiss final View downView = mDownView; // mDownView gets null'd before animation ends final int downPosition = mDownPosition; ++mDismissAnimationRefCount; mAnimatingPosition = mDownPosition; ViewCompat.animate(mDownView).translationX(dismissRight ? mViewWidth : -mViewWidth).alpha(0) .setDuration(mAnimationTime).setListener(new ViewPropertyAnimatorListener() { @Override public void onAnimationStart(View view) { // Do nothing. } @Override public void onAnimationEnd(View view) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { performDismiss(downView, downPosition); } } @Override public void onAnimationCancel(View view) { // Do nothing. } }); } else { // cancel ViewCompat.animate(mDownView).translationX(0).alpha(mAlpha).setDuration(mAnimationTime) .setListener(null); } mVelocityTracker.recycle(); mVelocityTracker = null; mDownX = 0; mDownY = 0; mDownView = null; mDownPosition = ListView.INVALID_POSITION; mSwiping = false; break; } case MotionEvent.ACTION_MOVE: { if (mVelocityTracker == null || mPaused) { break; } mVelocityTracker.addMovement(motionEvent); float deltaX = motionEvent.getRawX() - mDownX; float deltaY = motionEvent.getRawY() - mDownY; if (!mSwiping && Math.abs(deltaX) > mSlop && Math.abs(deltaY) < Math.abs(deltaX) / 2) { mSwiping = true; mSwipingSlop = (deltaX > 0 ? mSlop : -mSlop); } if (deltaX < 0 && !mSwipingLeft) mSwiping = false; if (deltaX > 0 && !mSwipingRight) mSwiping = false; if (mSwiping) { ViewCompat.setTranslationX(mDownView, deltaX - mSwipingSlop); ViewCompat.setAlpha(mDownView, Math.max(0f, Math.min(mAlpha, mAlpha * (1f - Math.abs(deltaX) / mViewWidth)))); return true; } break; } } return false; }
From source file:vc908.stickerfactory.ui.advancedrecyclerview.swipeable.ItemSlidingAnimator.java
private boolean animateSlideInternal(final RecyclerView.ViewHolder holder, int translationX, long duration, Interpolator interpolator) {// www.ja va 2 s . c o m if (!(holder instanceof SwipeableItemViewHolder)) { return false; } final View containerView = ((SwipeableItemViewHolder) holder).getSwipeableContainerView(); final int prevTranslationX = (int) (ViewCompat.getTranslationX(containerView) + 0.5f); endAnimation(holder); final int curTranslationX = (int) (ViewCompat.getTranslationX(containerView) + 0.5f); final int toX = translationX; if (curTranslationX == toX) { return false; } if (duration == 0 || Math.abs(toX - prevTranslationX) <= mImmediatelySetTranslationThreshold) { ViewCompat.setTranslationX(containerView, toX); return false; } ViewCompat.setTranslationX(containerView, prevTranslationX); final ViewPropertyAnimatorCompat animator = ViewCompat.animate(containerView); animator.setDuration(duration); if (interpolator != null) { animator.setInterpolator(interpolator); } animator.translationX(toX); animator.setListener(new ViewPropertyAnimatorListener() { @Override public void onAnimationStart(View view) { if (animatorListener != null) { animatorListener.onAnimationStart(view); } } @Override public void onAnimationEnd(View view) { animator.setListener(null); mActive.remove(holder); ViewCompat.setTranslationX(view, toX); if (animatorListener != null) { animatorListener.onAnimationEnd(view); } } @Override public void onAnimationCancel(View view) { if (animatorListener != null) { animatorListener.onAnimationCancel(view); } } }); mActive.add(holder); animator.start(); return true; }
From source file:com.test.xujixiao.xjx.widget.view.swipe_listview.SwipeListViewTouchListener.java
/** * Create choice animation//from w w w . j av a 2 s . c om * * @param view affected view * @param position list position */ private void generateChoiceAnimate(final View view, final int position) { animate(view).translationX(0).setDuration(animationTime).setListener(new ViewPropertyAnimatorListener() { @Override public void onAnimationStart(View view) { } @Override public void onAnimationCancel(View view) { } @Override public void onAnimationEnd(View animation) { swipeListView.resetScrolling(); resetCell(); } }); }