2013-11-10 12 views
2

Я пытаюсь анимировать объект Paint в своем обычном виде между цветами. Но анимация не работает.Анимация цвета объекта Paint

ObjectAnimator colorFade = ObjectAnimator.ofObject(mCirclePaint, "color", new ArgbEvaluator(), getColor(), 0xff000000); 
       colorFade.setDuration(1500); 
       colorFade.start(); 

      invalidate(); 

Я ранее установить цвет краски, как это:

mCirclePaint.setColor(Color.RED);

UPDATE Я не думаю, что Handler делает разницу в анимированный ли он или нет. Даже без обработчика я не могу анимировать объект рисования.

+0

что mCirclePaint? – pskink

+0

@pskink Это просто объект Paint для круга. – RiThBo

+1

mCirclePaint правильно анимирован, ваша проблема в том, что invalidate не называется – pskink

ответ

4

Это решение, которое я нашел:

ObjectAnimator colorFade = ObjectAnimator.ofObject(mCirclePaint, "color", new ArgbEvaluator(), getColor(), mColors[randomNum]); 
        colorFade.setDuration(1500); 
       colorFade.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { 

        @Override 
        public void onAnimationUpdate(ValueAnimator animation) { 
         // TODO Auto-generated method stub 
         invalidate(); 

        } 


       }); 

        colorFade.start(); 
2

попробовать это:

class MyView extends View { 
    private Paint mPaint; 
    public MyView(Context context) { 
     super(context); 
     mPaint = new Paint(); 

     ArgbEvaluator evaluator = new ArgbEvaluator(); 
     ObjectAnimator animator = ObjectAnimator.ofObject(this, "color", evaluator, 0xffff0000, 0xff00ff00, 0xff0000ff); 
     animator.setDuration(6000).start(); 
    } 

    public void setColor(int color) { 
     mPaint.setColor(color); 
     invalidate(); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     canvas.drawPaint(mPaint); 
    } 
} 
+0

Спасибо! Я просто отправил ответ себе с помощью Animation Listener. – RiThBo

Смежные вопросы