Advertisement
Guest User

Untitled

a guest
Mar 24th, 2017
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.30 KB | None | 0 0
  1. package ru.qasl.cashregister.fragment.boards;
  2.  
  3. import android.support.v4.view.ViewCompat;
  4. import android.support.v4.view.ViewPropertyAnimatorCompat;
  5. import android.support.v4.view.ViewPropertyAnimatorListener;
  6. import android.support.v7.widget.RecyclerView;
  7. import android.support.v7.widget.SimpleItemAnimator;
  8. import android.view.View;
  9. import android.view.animation.AccelerateInterpolator;
  10. import android.view.animation.DecelerateInterpolator;
  11.  
  12. import java.util.ArrayList;
  13. import java.util.List;
  14.  
  15. public class BoardsSlidingAnimator extends SimpleItemAnimator {
  16.  
  17. private List<RecyclerView.ViewHolder> pendingAdditions = new ArrayList<>();
  18. private List<RecyclerView.ViewHolder> pendingRemovals = new ArrayList<>();
  19.  
  20. @Override
  21. public void runPendingAnimations() {
  22.  
  23. final List<RecyclerView.ViewHolder> additionsTmp = pendingAdditions;
  24. final List<RecyclerView.ViewHolder> removalsTmp = pendingRemovals;
  25. pendingAdditions = new ArrayList<>();
  26. pendingRemovals = new ArrayList<>();
  27.  
  28. for (RecyclerView.ViewHolder holderForRemove : removalsTmp) {
  29. animateRemoveImpl(holderForRemove);
  30. }
  31. removalsTmp.clear();
  32.  
  33. if (!additionsTmp.isEmpty()) {
  34. Runnable action = () -> {
  35. for (RecyclerView.ViewHolder holderForAddition : additionsTmp) {
  36. animateAddImpl(holderForAddition);
  37. }
  38. additionsTmp.clear();
  39. };
  40. // запускаем, когда отработает анимация удаления
  41. ViewCompat.postOnAnimationDelayed(additionsTmp.get(0).itemView, action, getRemoveDuration());
  42. }
  43. }
  44.  
  45. @Override
  46. public boolean animateAdd(RecyclerView.ViewHolder holder) {
  47. // Прячем и двигаем вьюхи, что бы потом анимировать их появление из этой точки
  48. pendingAdditions.add(holder);
  49. holder.itemView.setTranslationY(300);
  50. holder.itemView.setAlpha(0);
  51. return true;
  52. }
  53.  
  54. @Override
  55. public boolean animateRemove(final RecyclerView.ViewHolder holder) {
  56. pendingRemovals.add(holder);
  57. return true;
  58. }
  59.  
  60. private void animateAddImpl(final RecyclerView.ViewHolder holder) {
  61. View view = holder.itemView;
  62. final ViewPropertyAnimatorCompat animator = ViewCompat.animate(view);
  63.  
  64. animator
  65. .translationY(0) // иммитируем появление из точки определенной в animateAdd()
  66. .alpha(1)
  67. .setDuration(getAddDuration())
  68. .setInterpolator(new DecelerateInterpolator())
  69. .setListener(new ViewPropertyAnimatorListener() {
  70. @Override
  71. public void onAnimationStart(View view) {
  72. dispatchAddStarting(holder);
  73. }
  74.  
  75. @Override
  76. public void onAnimationEnd(View view) {
  77. animator.setListener(null);
  78. dispatchAddFinished(holder);
  79.  
  80. view.setTranslationY(0); // clean up
  81. view.setAlpha(1);
  82. }
  83.  
  84. @Override
  85. public void onAnimationCancel(View view) {
  86. }
  87. })
  88. .start();
  89. }
  90.  
  91. private void animateRemoveImpl(final RecyclerView.ViewHolder holder) {
  92.  
  93. View view = holder.itemView;
  94.  
  95. final ViewPropertyAnimatorCompat animator = ViewCompat.animate(view);
  96.  
  97. animator
  98. .translationY(-view.getWidth())
  99. .alpha(0)
  100. .setDuration(getRemoveDuration())
  101. .setInterpolator(new AccelerateInterpolator())
  102. .setListener(new ViewPropertyAnimatorListener() {
  103. @Override
  104. public void onAnimationStart(View view) {
  105. dispatchRemoveStarting(holder);
  106. }
  107.  
  108. @Override
  109. public void onAnimationEnd(View view) {
  110. animator.setListener(null);
  111. dispatchRemoveFinished(holder);
  112.  
  113. view.setTranslationY(0); // cleanup
  114. view.setAlpha(1);
  115. }
  116.  
  117. @Override
  118. public void onAnimationCancel(View view) {
  119. }
  120. }).start();
  121. }
  122.  
  123.  
  124. @Override
  125. public boolean animateMove(RecyclerView.ViewHolder holder, int fromX, int fromY, int toX, int toY) {
  126. dispatchMoveFinished(holder); // Можно будет дописать анимацию перемещений столов
  127. return false;
  128. }
  129.  
  130. @Override
  131. public boolean animateChange(RecyclerView.ViewHolder oldHolder, RecyclerView.ViewHolder newHolder, int fromLeft, int fromTop, int toLeft, int toTop) {
  132. if (newHolder != null) {
  133. dispatchChangeFinished(newHolder, false);
  134. }
  135. dispatchChangeFinished(oldHolder, true);
  136. return false;
  137. }
  138.  
  139. @Override
  140. public void endAnimation(RecyclerView.ViewHolder item) {
  141. }
  142.  
  143. @Override
  144. public void endAnimations() {
  145. }
  146.  
  147. @Override
  148. public boolean isRunning() {
  149. //Дописать, если нужно будет
  150. return false;
  151. }
  152. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement