这是一个很简单的动画效果,使用属性动画即可实现,希望对读者学习动画能达到抛砖引玉的效果
一.自定义动画效果——Loading效果
如上是我们需要做的一个Loading动画。Loading效果是很常见的一种动画,最简单的实现让设计画个动态图即可,或者画个静态图然后使用帧动画也可以实现。但是今天我们用纯代码实现,不用任何图片资源。
大致思路
我们自定义一个View,继承View类,然后画两个不同半径的弧形,转动不同的角度即可实现。
绘制两个不同半径的弧形
首先初始化外圆和内园的Recf();
private RectF mOuterCircleRectF = new RectF();
private RectF mInnerCircleRectF = new RectF();
然后在onDraw方法绘制圆弧:
//获取View的中心
float centerX = getWidth() / 2;
float centerY = getHeight() / 2;
if (lineWidth > centerX) {
throw new IllegalArgumentException("lineWidth值太大了");
}
//外圆半径,因为我们的弧形是有宽度的,所以计算半径的时候应该把这部分减去,不然会有切割的效果
float outR = centerX - lineWidth;
//小圆半径
float inR = outR * 0.6f - lineWidth;
//设置弧形的距离上下左右的距离,也就是包围园的矩形。
mOuterCircleRectF.set(centerX - outR, centerY - outR, centerX + outR, centerY + outR);
mInnerCircleRectF.set(centerX - inR, centerY - inR, centerX + inR, centerY + inR);
//绘制外圆
canvas.drawArc(mOuterCircleRectF, mRotateAngle % 360, OUTER_CIRCLE_ANGLE, false, mStrokePaint);
//绘制内圆
canvas.drawArc(mInnerCircleRectF, 270 - mRotateAngle % 360, INTER_CIRCLE_ANGLE, false, mStrokeP