更新:20/11/13:这仍未解决。
我正在尝试在自定义视图中动画创建一个圆。我想要动画化周长的创建 - 在动画开始时有一段弧线,到动画结束时,圆形完成。
我通过遵循这个答案成功实现了这一点 - https://dev59.com/f2gu5IYBdhLWcg3wt5Lt#11168363 - 并只需添加一个重复的
这是我的当前代码:
主要问题是:如何设置动画的持续时间?我希望这可以像动画器类中那样轻松更改。
附注:据我所知,我无法使用任何动画器,例如ViewPropertyAnimator或ObjectAnimator。如果我错了,请纠正我!
我正在尝试在自定义视图中动画创建一个圆。我想要动画化周长的创建 - 在动画开始时有一段弧线,到动画结束时,圆形完成。
我通过遵循这个答案成功实现了这一点 - https://dev59.com/f2gu5IYBdhLWcg3wt5Lt#11168363 - 并只需添加一个重复的
Handler
来增加sweepAngle
并调用invalidate();
然而,这不能按照我想要的方式工作,因为我无法设置完成圆的持续时间。这是我的当前代码:
Path mOuterCirclePath = new Path();
final RectF mOval = new RectF();
int mSweepAngle = 0;
int mStartAngle = -90;
@Override
protected void onDraw(Canvas canvas) {
mOval.set(0, 0, mBorderRect.right, mBorderRect.bottom); //mBorderRect is the outside border of my view
mOuterCirclePath.arcTo(mOval, 0, 0, true);
canvas.drawArc(mOval, -mStartAngle, mSweepAngle, false,
mOuterCirclePaint);
}
public void drawOuterCircle() {
startUpdateOuterCircle();
}
Runnable mCircleInvalidator = new Runnable() {
@Override
public void run() {
if (mSweepAngle <= 360) {
mSweepAngle++
}
invalidate();
mHandler.postDelayed(mCircleInvalidator, 20);
}
};
void startUpdateOuterCircle() {
mCircleInvalidator.run();
}
void stopUpdateOuterCircle() {
mHandler.removeCallbacks(mCircleInvalidator);
}
主要问题是:如何设置动画的持续时间?我希望这可以像动画器类中那样轻松更改。
附注:据我所知,我无法使用任何动画器,例如ViewPropertyAnimator或ObjectAnimator。如果我错了,请纠正我!