Как ясно сказано, я хочу замедлить работу 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;
}
}
Есть ли обходной путь для этого?
Я уже знаю, что, но цель моего вопроса в том, чтобы сделать это в то время как она выполняется в середине анимации. К сожалению, это не сработает. –
Он по-прежнему работает. Имейте функцию на интерполяторе, которая сообщает ему перейти в медленный режим. Вызовите его, когда нажимается кнопка. Вам придется немного поиграть с ним, но правильным ответом будет Интерполятор. –
Ahh, я понял, что вы знаете. Я постараюсь сделать это, тогда я отвечу вам. –