我們可以利用drawable + Animatable 來完成我們想要的客製化progress bar , 主要轉動的部分當然是由animation來完成的,我們只需要利用drawArc,並且使用animation來更改餵進去的參數即可,
@Override
public void draw(Canvas canvas) {
canvas.drawArc(mBounds, mCurrentAngle, 340, false, mPaint);
}
不斷的call draw並且更改mCurrentAngle造成progressbar轉動的效果至於改變參數的方法可以參考下面的code
mObjectAnimatorAngle = ObjectAnimator.ofFloat(this, mAngleProperty, 360f);
mObjectAnimatorAngle.setInterpolator(new LinearInterpolator());
mObjectAnimatorAngle.setDuration(ANGLE_ANIMATOR_DURATION);
mObjectAnimatorAngle.setRepeatMode(ValueAnimator.RESTART);
mObjectAnimatorAngle.setRepeatCount(ValueAnimator.INFINITE);
這是4.0之後的寫法,在property改變的時候去設定值,並且call invalidateSelf()使得draw被重複trigger
private Property<MyProgressDrawable, Float> mAngleProperty
= new Property<MyProgressDrawable, Float>(Float.class, "angle") {
@Override
public Float get(MyProgressDrawable object) {
return object.getCurrentAngle();
}
@Override
public void set(MyProgressDrawable object, Float value) {
object.setCurrentAngle(value);
}
};
public void setCurrentAngle(Float angle) {
mCurrentAngle = angle;
invalidateSelf();
}
最後附上 sample code

沒有留言:
張貼留言