我有一個屬性動畫,但它不光滑,即我在動畫中跳轉。我嘗試使用動畫器的參數,例如插值器,持續時間和幀延遲,但無法獲得平滑的效果。有沒有人有一些技巧/例子?這裏是我當前的代碼來設置動畫:製作流暢的動畫
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
一個電話,但在後面的代碼來了,我纔開始動畫)
編輯:有人問我要顯示什麼我的動畫,所以在這裏它是:
這是從動畫得到值的setter函數:
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);
}
我不知道是否有什麼特別沉重這裏,但我可能是錯的...
謝謝,請參閱我上面的編輯。 – user940016
我個人不喜歡旋轉方法,我的直覺說它過度。不知道它是否適用於您,但我可能會以某種方式查看使用精靈,例如http://p-xr.com/android-tutorial-2d-canvas-graphics/不同之處在於您調整精靈而不是繪製在圖形中的畫布。 – Emile