【发布时间】:2013-11-17 18:39:59
【问题描述】:
更新:2013 年 11 月 20 日:这仍未解决。
我正在尝试在自定义视图中动画创建一个圆圈。我想对圆周的创建进行动画处理 - 动画开始时有一个圆弧,到动画结束时,圆是完整的。
我按照这个答案成功地做到了这一点 - https://stackoverflow.com/a/11168363/2442638 - 只需添加一个重复的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);
}
主要问题是:如何设置动画的持续时间?我希望它可以轻松更改,就像在动画师课程中一样。
附:据我所知,我不能为此使用任何动画师,例如“ObjectAnimator”的ViewPropertyAnimator。如果我错了,请纠正我!
【问题讨论】:
-
@RiThBo,您需要为您的 Arc 类创建 getter 和 setter 方法。我有一个名为“sweepAngle”的变量,并创建了 getSweepAngle() 和 setSweepAngle()。您的代码与我的非常相似,因此我相信您需要创建 getMSweepAngle() 和 setMSweepAngle()。我在下面添加了一个答案来澄清。
标签: android android-animation android-canvas android-view android-handler