Android пауза анимация

1

Я хочу остановить анимацию, как только я нажму кнопку. Я имею в виду, что я хочу приостановить анимацию кнопки, когда она нажата, и хочу показать изображение вместо этой кнопки. Я хочу сделать это для уровня api > 11. Я использую аниматор значений для анимации. Пожалуйста, помогите

Теги:
animation

2 ответа

2
Лучший ответ

Нет поддержки API для приостановки/возобновления анимации на уровне API 11. Эти функции были добавлены в уровень API 19.

Однако здесь вы можете попробовать qaru.site/questions/643981/...

  • 0
    На самом деле я анимирую с помощью Value animator, поэтому предоставленная ссылка мне не нужна .. В любом случае спасибо
0

То, что я сделал, это создать мое собственное значение interpolatedTime и игнорировать отправленное.

Если анимация приостановлена, я продолжаю обновлять прошедшее время. Затем я вычисляю собственное значение интерполированного времени и использую его для любой анимации, которую я делаю.

/**
 * The animator for the LinearProgressBar.
 */
class LinearProgressBarAnimator extends Animation
{
    private LinearProgressBar _bar;

    /**
     * The desired fill percent when done animating.
     */
    private float _newFillPercent;

    /**
     * The current fill percent.
     */
    private float _oldFillPercent;

    /**
     * Keeps track of if this object is in a paused state.
     */
    private boolean _paused;

    /**
     * TimeConstants trackers to fire _onSecondTick
     * at consistent 1 second intervals.
     */
    private long _accumulatedTickTime;
    private long _lastAccumulatedTime;

    /**
     * Creates a linear progress bar animator with the reference bar and desired fill percent.
     * Call Animate() in order to make it animate the ProgressBar.
     * @param bar
     * @param newFillPercent
     */
    public LinearProgressBarAnimator(LinearProgressBar bar, float newFillPercent)
    {
        super();

        _newFillPercent      = newFillPercent;
        _oldFillPercent      = bar.getFillPercent();
        _bar                 = bar;
        _paused              = false;
        _accumulatedTickTime = 0;
        _lastAccumulatedTime = TimeConstants.NOT_SET;
    }

    /**
     * Applies the interpolated change in fill percent.
     * @param interpolatedTime
     * @param transformation
     */
    @Override
    protected void applyTransformation(float interpolatedTime, Transformation transformation)
    {
        if (_lastAccumulatedTime == TimeConstants.NOT_SET || _paused)
        {
            _lastAccumulatedTime = System.currentTimeMillis();
            return;
        }

        _accumulatedTickTime += System.currentTimeMillis() - _lastAccumulatedTime;

        // This handles pausing, the passed interpolatedTime is ignored
        float adjustedInterpolatedTimed = (float)_accumulatedTickTime / (float)getDuration();
        float newTimeAdjustedFillPercent = _oldFillPercent + ((_newFillPercent - _oldFillPercent) * adjustedInterpolatedTimed);
        _bar.setFillPercent(newTimeAdjustedFillPercent);
        _bar.requestLayout();

        _lastAccumulatedTime = System.currentTimeMillis();
    }

    public void pause()
    {
        _paused = true;
    }

    public void play()
    {
        _paused = false;
    }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню