WedX - журнал о программировании и компьютерных науках

Замедлить текущую анимацию?

Я пытаюсь достичь довольно простой цели. Существует imageView пропеллера с бесконечной анимацией вращения LinearInterpolator до тех пор, пока не будет нажата кнопка. Как красиво замедлить анимацию до остановки после того, как пользователь нажмет кнопку?

Вот очень простой код анимации:

<?xml version="1.0" encoding="UTF-8"?>
<rotate
    android:interpolator="@anim/linear_interpolator"
    xmlns:android="https://schemas.android.com/apk/res/android"
    android:fromDegrees="0"
    android:toDegrees="360"
    android:pivotX="50%"
    android:pivotY="50%"
    android:repeatCount="infinite"
    android:fillAfter="true"
    android:fillEnabled="true"
    android:duration="800" />
28.07.2014

  • Вы сделали анимацию в XML или в коде? Загрузите код анимации 28.07.2014
  • Теперь это в XML, однако я начинаю думать, что невозможно сделать плавный переход между двумя анимациями xml. 28.07.2014

Ответы:


1

Запустить анимацию:

int loops = 1000000;
int degreesPerSecond = 360;
view.animate().rotationBy(degreesPerSecond * loops).setDuration(loops * 1000)
  .setInterpolator(new LinearInterpolator());

Остановить анимацию:

view.animate().rotationBy(degreesPerSecond/2).setDuration(1000)
    .setInterpolator(new DecelerateInterpolator());

Вам нужно будет поиграть со значениями, чтобы получить то, что вы хотите. Но это выглядит неплохо.

28.07.2014
  • @VinayWadhwa Это должно быть как-то связано с вашей точной настройкой или другими вещами, происходящими в потоке пользовательского интерфейса в то время. Предложите вам задать свой вопрос с подробностями или попробовать самостоятельно и убедиться, что вы используете реальное устройство. 26.03.2015
  • что я делаю, так это запускаю анимацию с нормальной скоростью. По завершении какой-то задачи я останавливаю начальную анимацию и играю вторую анимацию, как вы предложили. Теперь, скажем, в этот момент начальная анимация остановилась на 270 градусах. Следующая анимация замедления начнется с 0 градусов и, следовательно, заикание / прыжок. Если начальная анимация случайно остановится на 360 или 0 градусов, мы не увидим заикания. 26.03.2015
  • @VinayWadhwa Ну, у вас должно быть что-то отличное от того, что есть у меня. Это работает. Он не возвращается к 0 градусов. 26.03.2015
  • @VinayWadhwa убедитесь, что вы используете rotationBy, а не только rotation 26.03.2015

  • 2

    Создайте еще один файл XML с той же анимацией и установите продолжительность больше, возможно, 1200. Когда вы нажимаете кнопку, вы затем устанавливаете View (пропеллер) на новую более медленную анимацию.

    public void onButtonClick(View v)
    {
        if(slow){
            Animation fastRotate = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.rotate_fast); 
            propellerView.startAnimation(fastRotate)
        }
        else{
            Animation slowRotate = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.rotate_slow); 
            propellerView.startAnimation(slowRotate)
        }
    }
    
    28.07.2014
  • Я уже пробовал это. Однако между анимациями есть значительный скачок. 28.07.2014
  • Это потому, что пропеллер возвращается к 0 градусов, чтобы начать? 28.07.2014
  • Новые материалы

    Как создать диаграмму градиентной кисти с помощью D3.js
    Резюме: Из этого туториала Вы узнаете, как добавить градиентную кисть к диаграмме с областями в D3.js. Мы добавим градиент к значениям SVG и применим градиент в качестве заливки к диаграмме с..

    Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
    Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

    Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
    В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..


    Для любых предложений по сайту: [email protected]