我們可以利用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
沒有留言:
張貼留言