Android加载动画系列——GearsTwoLoadingAnim
前面我们实现过IOS升级的齿轮转动动画,今天就让我们来实现两个齿轮的传动动画吧~
让我们先来看看效果图:
1、GearsTwoLoadingAnim.java源码如下:
public class GearsTwoLoadingAnim extends View { private float mWidth = 0f; private Paint mPaint, mPaintAxle; private Paint mPaintRing; private float mPadding = 0f; private float mWheelLength;//齿轮高度 private int mWheelSmallSpace = 10; private int mWheelBigSpace = 8; ValueAnimator valueAnimator = null; float mAnimatedValue = 0f; float hypotenuse = 0f; float smallRingCenterX = 0f; float smallRingCenterY = 0f; float bigRingCenterX = 0f; float bigRingCenterY = 0f; public GearsTwoLoadingAnim(Context context) { this(context, null); } public GearsTwoLoadingAnim(Context context, AttributeSet attrs) { this(context, attrs, 0); } public GearsTwoLoadingAnim(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); initPaint(); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); if (getMeasuredWidth() > getHeight()) mWidth = getMeasuredHeight(); else mWidth = getMeasuredWidth(); } private void drawSmallRing(Canvas canvas) { hypotenuse = (float) (mWidth * Math.sqrt(2)); smallRingCenterX = (float) ((hypotenuse / 6.f) * Math.cos(45 * Math.PI / 180f)); smallRingCenterY = (float) ((hypotenuse / 6.f) * Math.sin(45 * Math.PI / 180f)); mPaintRing.setStrokeWidth(dip2px(1.0f)); canvas.drawCircle(mPadding + smallRingCenterX, smallRingCenterY +