0

が呼び出されるたびonDraw()に、キャンバス上に一連の点を描いています。1 つのポイントをアニメートして、色が変化したり、フェード インおよびフェード アウトしたりするにはどうすればよいですか? つまり、本質的にオレンジ→赤と戻るか、不透明→透明と戻るか?

私は次のことをしています:

public void onDraw(Canvas canvas) {
  drawDots();
}

private void drawDots() {
  canvas.drawCircle(xcoord, ycoord, 20, getPaintObj(param));
}

private Paint getPaintObj(int param) {
  if (param % 2 == 0) {
     ObjectAnimator colorFade = ObjectAnimator.ofObject(paintObj, "color", new ArgbEvaluator(), 0xff00ff00, 0xffff0000, 0xff0000ff);
     colorFade.setDuration(2000);
     colorFade.setInterpolator(new LinearInterpolator());
     colorFade.setRepeatCount(ValueAnimator.INFINITE);
     colorFade.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
        @Override
        public void onAnimationUpdate(ValueAnimator animation) {
            invalidate();
        }
     });
     colorFade.start();
    return paintObj;

  } else {
    return otherPaintObj;
  }
}

問題は、それがアニメーション化されないことです。最初の色 (0xff00ff00) に固執します。私は何を間違っていますか?

4

1 に答える 1

1

キャンバス自体に描かれた円をアニメーション化しようとしていたため、ObjectAnimator はキャンバスではうまく機能しません。キャンバスに描かれた点よりも、実際のオブジェクト (TextView、ImageView など) に適しています。

私が使用した解決策は、キャンバスを時々再描画し、描画された円の半径を変更してアニメーションをシミュレートすることです。

于 2014-11-09T02:48:56.930 に答える