0
由於問題已清楚說明,我想在用戶點擊某個按鈕時執行TranslateAnimation時放慢速度。如何在執行過程中減慢中間的動畫?
我這是怎麼實例化TranslateAnim其中-textViewHeight
和layoutHeight
都只是一些價值觀,我已經在較早的時間實例:
它從多達底部。
TranslateAnim translateAnim = new TranslateAnim(0, 0, -textViewHeight, layoutHeight);
translateAnim.setDuration(20000);
translateAnim.setInterpolator(new LinearInterpolator());
textView.startAnimation(translateAnim);
這就是我想要減緩TranslateAnim下來的方法:
如我所料,雖然它沒有工作。
public void slowDown() {
translateAnim.setStartTime(translateAnim.getStartTime() - 20000);
translateAnim.setDuration((20000 - translateAnim.getElapsedTime()) * 2);
}
我也試過這樣做,但仍沒有運氣:
translateAnim.setInterpolator(new DecelerateInterpolator());
我定製TranslateAnim類擴展TranslateAnimation:
public class TranslateAnim extends TranslateAnimation {
private long mElapsedAtPause, elapsedTime;
private boolean mPaused = false;
public TranslateAnim(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta) {
super(fromXDelta, toXDelta, fromYDelta, toYDelta);
}
@Override
public boolean getTransformation(long currentTime, Transformation outTransformation) {
if (mPaused && mElapsedAtPause == 0) {
mElapsedAtPause = currentTime - getStartTime();
}
if (mPaused) {
setStartTime(currentTime - mElapsedAtPause);
}
elapsedTime = currentTime - getStartTime();
return super.getTransformation(currentTime, outTransformation);
}
public long getElapsedTime() {
return elapsedTime;
}
public void slowDown() {
translateAnim.setStartTime(translateAnim.getStartTime() - 20000);
translateAnim.setDuration((20000 - translateAnim.getElapsedTime()) * 2);
}
public void pause() {
mElapsedAtPause = 0;
mPaused = true;
}
public void resume() {
mPaused = false;
}
@Override
public void cancel() {
super.cancel();
elapsedTime = 0;
mElapsedAtPause = 0;
mPaused = false;
}
}
對此有什麼解決辦法?
我已經知道了,但我的問題的目的是爲了做到這一點,而這是在動畫中被執行。所以不幸的是這不會起作用。 –
它仍然有效。在插補器上有一個函數可以讓它進入慢速模式。點擊按鈕時調用它。你必須稍微玩一下,但正確的答案是Interpolator。 –
啊,我明白你知道。我會盡力去做,然後我會回覆你。 –