content: package com.grumoon.androidultrapulltorefreshdemo.header;
  
  
  import android.content.Context;
  import android.content.res.Resources;
  import android.graphics.Bitmap;
  import android.graphics.BitmapFactory;
  import android.graphics.Canvas;
  import android.graphics.ColorFilter;
  import android.graphics.Matrix;
  import android.graphics.Paint;
  
  import android.graphics.drawable.Animatable;
  import android.graphics.drawable.Drawable;
  import android.view.View;
  import android.view.animation.Animation;
  import android.view.animation.LinearInterpolator;
  import android.view.animation.RotateAnimation;
  
  import com.grumoon.androidultrapulltorefreshdemo.R;
  
  
  /**
   * Created by grumoon on 2015/1/20.
   */
  public class WindmillDrawable extends Drawable implements Animatable {
  
      private static final String TAG = WindmillDrawable.class.getSimpleName();
  
      private Resources resources;
  
      private Bitmap windmill;
  
      private Matrix matrix;
  
      private View parent;
  
  
      private Animation animation;
  
      private boolean isFirstDraw = true;
  
      private boolean isAnimating;
  
      public WindmillDrawable(Context context, View parent) {
          resources = context.getResources();
          windmill = BitmapFactory.decodeResource(resources, R.drawable.windmill);
  
          matrix = new Matrix();
  
          this.parent = parent;
  
  
          animation = new RotateAnimation(360, 0, RotateAnimation.RELATIVE_TO_SELF, 0.5f, RotateAnimation.RELATIVE_TO_SELF, 0.5f);
          animation.setInterpolator(new LinearInterpolator());
          animation.setDuration(800);
          animation.setRepeatMode(Animation.RESTART);
          animation.setRepeatCount(Animation.INFINITE);
          animation.setFillAfter(true);
  
      }
  
  
      @Override
      public void draw(Canvas canvas) {
          if (isFirstDraw) {
              isFirstDraw = false;
              matrix.setTranslate((getBounds().width() - windmill.getWidth()) / 2, (getBounds().height() - windmill.getHeight()) / 2);
          }
  
          Paint p = new Paint();
          canvas.drawBitmap(windmill, matrix, p);
      }
  
      @Override
      public void setAlpha(int alpha) {
  
      }
  
      @Override
      public void setColorFilter(ColorFilter cf) {
  
      }
  
      @Override
      public int getOpacity() {
          return 0;
      }
  
      public void postRotation(int degree) {
  
          matrix.postRotate(degree, getBounds().exactCenterX(), getBounds().exactCenterY());
          invalidateSelf();
      }
  
      @Override
      public void start() {
          parent.startAnimation(animation);
          isAnimating = true;
      }
  
      @Override
      public void stop() {
          parent.clearAnimation();
          isAnimating = false;
      }
  
      @Override
      public boolean isRunning() {
          return isAnimating;
      }
  }
  