2014年7月9日 星期三

Android 開發 (五十四) 客製化 progress bar

通常內建的progressbar都長的不是非常的好看,假設我們今天想要客製化一個自己的progress bar,



我們可以利用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

沒有留言:

張貼留言