如何在android中使用基于值的圆圈大小绘制一个带有animation的圆
我想开发一个自定义组件,它根据不同的值绘制一部分的圆。 例如绘制1/4圈,1/2圈等。组件需要animation来显示绘制过程。 部分圆是在静态图像视图的顶部绘制的,我打算使用两个视图,在静态视图之上animation一个视图。 任何build议如何开发这个?
我把截图作为参考。
请参考图片,并感受它的样子。 谢谢!
提前致谢。
你必须绘制圆形视图,之后你应该创build一个animation。
创build圆视图:
public class Circle extends View { private static final int START_ANGLE_POINT = 90; private final Paint paint; private final RectF rect; private float angle; public Circle(Context context, AttributeSet attrs) { super(context, attrs); final int strokeWidth = 40; paint = new Paint(); paint.setAntiAlias(true); paint.setStyle(Paint.Style.STROKE); paint.setStrokeWidth(strokeWidth); //Circle color paint.setColor(Color.RED); //size 200x200 example rect = new RectF(strokeWidth, strokeWidth, 200 + strokeWidth, 200 + strokeWidth); //Initial Angle (optional, it can be zero) angle = 120; } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawArc(rect, START_ANGLE_POINT, angle, false, paint); } public float getAngle() { return angle; } public void setAngle(float angle) { this.angle = angle; } }
创buildanimation类来设置新的angular度:
public class CircleAngleAnimation extends Animation { private Circle circle; private float oldAngle; private float newAngle; public CircleAngleAnimation(Circle circle, int newAngle) { this.oldAngle = circle.getAngle(); this.newAngle = newAngle; this.circle = circle; } @Override protected void applyTransformation(float interpolatedTime, Transformation transformation) { float angle = oldAngle + ((newAngle - oldAngle) * interpolatedTime); circle.setAngle(angle); circle.requestLayout(); } }
将圆圈放入您的布局中:
<com.package.Circle android:id="@+id/circle" android:layout_width="300dp" android:layout_height="300dp" />
最后开始animation:
Circle circle = (Circle) findViewById(R.id.circle); CircleAngleAnimation animation = new CircleAngleAnimation(circle, 240); animation.setDuration(1000); circle.startAnimation(animation);
结果是: