PageRenderTime 26ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/app/src/main/java/com/android/chefmonster/LoadingDrawble/loadingdrawable/render/LoadingRenderer.java

https://gitlab.com/santoshvarma4u/chefmonster-Android
Java | 124 lines | 88 code | 28 blank | 8 comment | 0 complexity | 1e98272d4dee72e1e2c9ff5517cd25fc MD5 | raw file
  1. package com.android.chefmonster.LoadingDrawble.loadingdrawable.render;
  2. import android.animation.Animator;
  3. import android.animation.ValueAnimator;
  4. import android.content.Context;
  5. import android.graphics.Canvas;
  6. import android.graphics.ColorFilter;
  7. import android.graphics.Rect;
  8. import android.graphics.RectF;
  9. import android.graphics.drawable.Drawable;
  10. import android.os.Handler;
  11. import android.os.Looper;
  12. import android.util.Log;
  13. import android.view.animation.Animation;
  14. import android.view.animation.LinearInterpolator;
  15. import com.android.chefmonster.LoadingDrawble.loadingdrawable.DensityUtil;
  16. public abstract class LoadingRenderer {
  17. private static final long ANIMATION_DURATION = 1333;
  18. private static final float DEFAULT_SIZE = 56.0f;
  19. private final ValueAnimator.AnimatorUpdateListener mAnimatorUpdateListener
  20. = new ValueAnimator.AnimatorUpdateListener() {
  21. @Override
  22. public void onAnimationUpdate(ValueAnimator animation) {
  23. computeRender((float) animation.getAnimatedValue());
  24. invalidateSelf();
  25. }
  26. };
  27. /**
  28. * Whenever {@link LoadingDrawable} boundary changes mBounds will be updated.
  29. * More details you can see {@link LoadingDrawable#onBoundsChange(Rect)}
  30. */
  31. protected final Rect mBounds = new Rect();
  32. private Drawable.Callback mCallback;
  33. private ValueAnimator mRenderAnimator;
  34. protected long mDuration;
  35. protected float mWidth;
  36. protected float mHeight;
  37. public LoadingRenderer(Context context) {
  38. initParams(context);
  39. setupAnimators();
  40. }
  41. @Deprecated
  42. protected void draw(Canvas canvas, Rect bounds) {
  43. }
  44. protected void draw(Canvas canvas) {
  45. draw(canvas, mBounds);
  46. }
  47. protected abstract void computeRender(float renderProgress);
  48. protected abstract void setAlpha(int alpha);
  49. protected abstract void setColorFilter(ColorFilter cf);
  50. protected abstract void reset();
  51. protected void addRenderListener(Animator.AnimatorListener animatorListener) {
  52. mRenderAnimator.addListener(animatorListener);
  53. }
  54. void start() {
  55. reset();
  56. mRenderAnimator.addUpdateListener(mAnimatorUpdateListener);
  57. mRenderAnimator.setRepeatCount(ValueAnimator.INFINITE);
  58. mRenderAnimator.setDuration(mDuration);
  59. mRenderAnimator.start();
  60. }
  61. void stop() {
  62. // if I just call mRenderAnimator.end(),
  63. // it will always call the method onAnimationUpdate(ValueAnimator animation)
  64. // why ? if you know why please send email to me (dinus_developer@163.com)
  65. mRenderAnimator.removeUpdateListener(mAnimatorUpdateListener);
  66. mRenderAnimator.setRepeatCount(0);
  67. mRenderAnimator.setDuration(0);
  68. mRenderAnimator.end();
  69. }
  70. boolean isRunning() {
  71. return mRenderAnimator.isRunning();
  72. }
  73. void setCallback(Drawable.Callback callback) {
  74. this.mCallback = callback;
  75. }
  76. void setBounds(Rect bounds) {
  77. mBounds.set(bounds);
  78. }
  79. private void initParams(Context context) {
  80. mWidth = DensityUtil.dip2px(context, DEFAULT_SIZE);
  81. mHeight = DensityUtil.dip2px(context, DEFAULT_SIZE);
  82. mDuration = ANIMATION_DURATION;
  83. }
  84. private void setupAnimators() {
  85. mRenderAnimator = ValueAnimator.ofFloat(0.0f, 1.0f);
  86. mRenderAnimator.setRepeatCount(Animation.INFINITE);
  87. mRenderAnimator.setRepeatMode(Animation.RESTART);
  88. mRenderAnimator.setDuration(mDuration);
  89. //fuck you! the default interpolator is AccelerateDecelerateInterpolator
  90. mRenderAnimator.setInterpolator(new LinearInterpolator());
  91. mRenderAnimator.addUpdateListener(mAnimatorUpdateListener);
  92. }
  93. private void invalidateSelf() {
  94. mCallback.invalidateDrawable(null);
  95. }
  96. }