プロパティ アニメーションがありますが、スムーズではありません。つまり、アニメーションがジャンプします。インターポレーター、デュレーション、フレーム遅延などのアニメーターのパラメーターをいじってみましたが、滑らかな効果が得られません。誰かがいくつかのトリック/例を持っていますか? アニメーターを設定するための現在のコードは次のとおりです。
rotationAnimator=new ObjectAnimator();
rotationAnimator.setTarget(rotationController);
rotationAnimator.setPropertyName("mapRotation");
rotationAnimator.setInterpolator(new LinearInterpolator());
ValueAnimator.setFrameDelay(24);
rotationAnimator.setDuration(ROTATION_DURATION);
rotationAnimator.setRepeatCount(ValueAnimator.INFINITE);
rotationAnimator.setRepeatMode(ValueAnimator.RESTART);
( への呼び出しもありますがsetFloatValues
、アニメーションを開始する前に、コードの後半に来ます)
編集:私がアニメーション化しているものを表示するように求められたので、ここにあります:
これは、アニメーションから値を取得するセッター関数です。
public void setMapRotation(float rotationDegrees)
{
if ((rotationAnimator!=null)&&(rotationAnimator.isRunning()))
rotationAnimator.cancel();
rotationDegrees%=360;
if (rotationDegrees<0) rotationDegrees+=360;
rotationView.setRotationDegrees(rotationDegrees);
if (rotationDegrees!=oldRotationDegrees)
{
notifyRotationListeners();
oldRotationDegrees=rotationDegrees;
}
}
コードを見ると、呼び出される別の関数 (setRotationDegrees) があることがわかります。
public void setRotationDegrees(float rotationDegrees)
{
this.rotationDegrees=rotationDegrees%360;
if (this.rotationDegrees<0) this.rotationDegrees+=360;
Log.i("MapView","View degrees: " + this.rotationDegrees);
invalidate();
}
そして、それは無効化の後に起こることです:
@Override protected void dispatchDraw(Canvas canvas)
{
Log.i("MapView","Redrawing");
int saveCount=canvas.save(Canvas.MATRIX_SAVE_FLAG);
canvas.rotate(rotationDegrees,getWidth()/2,getHeight()/2);
canvas.setDrawFilter(drawFilter);
canvas.getMatrix(rotationMatrix);
super.dispatchDraw(canvas);
canvas.restoreToCount(saveCount);
}
ここに特に重いものがあるかどうかはわかりませんが、間違っているかもしれません...