Intereting Posts
Разработка приложения для Android в отдельных рабочих модулях Вертикальный TextView в Android Доступ к GPS не работает. Приложение использует сеть для получения местоположения Исключение Null Pointer для Android в Textview setText NullPointerException с помощью ProgressBar с использованием ActionBarCompat Как определить, открыто ли приложение Android из сообщения «Уведомление»? Потоковая передача с камеры android на ионную Does Environment.getExternalStorageDirectory () возвращает полезную папку данных, когда не установлена ​​SD-карта? Кэш нескольких устройств Google IAB V3 Есть ли способ запустить тест Espresso с несколькими методами тестирования, но только один метод установки? Поддержка iframe на мобильных устройствах Не удалось найти цель с хэш-строкой android-23 Как загрузить заголовок веб-страницы в Android WebView? Android сохраняет массив настраиваемых объектов Android – простая пользовательская форма ввода веб-представления для встроенной java с jQuery Mobile

Android-анимация startOffset сломана или глючит?

Я взял анимацию xml прямо из документов Android, и, насколько я вижу, не работает ни на моем эмуляторе 2.1 update 1, ни на моем обновлении 2.1 Galaxy S.

В частности, я пытаюсь создать анимацию, чтобы пульсировать представление (т. Е. Сделать его меньше, чем больше в одной анимации). Это очень простая разметка:

<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <scale android:fromXScale="1.0" android:toXScale="0.5" android:fromYScale="1.0" android:toYScale="0.5" android:pivotX="50%" android:pivotY="50%" android:duration="1000" /> <set android:startOffset="1000"> <scale android:fromXScale="0.5" android:toXScale="1.0" android:fromYScale="0.5" android:toYScale="1.0" android:pivotX="50%" android:pivotY="50%" android:duration="1000" /> </set> </set> 

Так что я пытаюсь добиться, чтобы уменьшить представление от его размера до половины его в течение секунды, а затем увеличить его до первоначального размера за секунду. Чтобы повторить повторение, в течение двух секунд оно должно начинаться с оригинала -> половинного размера -> оригинала.

Что на самом деле происходит, так это мгновенно привязано к половине размера просмотров (хотя изX / YScale в 1.0), а затем выполняет анимацию в течение двух секунд и после этого снова возвращается к исходному размеру.

Может ли кто-нибудь еще попробовать это быстро? Если другие видят это поведение, я отправлю его как ошибку. Я просто не могу поверить, что такое базовое может быть сломано !?

Кроме того, копирование этой анимации под заголовком «Tween Animation» на этой странице http://developer.android.com/guide/topics/graphics/2d-graphics.html слово в слово также не оживляет, как говорится на странице. Кажется, сломается точно так же!

У кого-нибудь есть идеи?

Благодаря!

Энди.

Я удалил второй <set> , поэтому есть только один <set> с двумя <scale> . Это заработало один цикл, но он не повторился. Возможно, вам нужно прослушать окончание анимации и вручную перезапустить его (так что смещения начинаются с 0 каждый раз).

На яркой стороне я смог использовать repeatMode для достижения эффекта, который, как вам кажется, нужен, используя только один тег:

 <scale xmlns:android="http://schemas.android.com/apk/res/android" android:repeatMode="reverse" android:fromXScale="1.0" android:toXScale="0.5" android:fromYScale="1.0" android:toYScale="0.5" android:pivotX="50%" android:pivotY="50%" android:duration="1000" /> 

Что-то, что я недавно обнаружил и частично несет ответственность за нежелательное поведение вашей анимации, заключается в том, что многие атрибуты XML, используемые в <set> , не работают!

В вашем примере кода у вас есть <set android:startOffset="1000">

Из-за смешной ошибки / дефекта Android проигнорирует этот атрибут, который заставит ваш второй дочерний <set> анимаций начать одновременно с вашим родителем <set>

Что еще более расстраивает, так это то, что этот атрибут работает программно в коде, setStartOffset() но не в XML.

Я провел несколько разочаровывающих часов, выясняя, какие атрибуты работают в коде и XML для AnimationSet s, и отправил отчет / проблему с ошибкой: Issue 17662

В итоге:

SetRepeatCount () / android: repeatCount

Этот атрибут (а также repeatMode) не работает в коде или XML. Это затрудняет повторение всего набора анимаций.

SetDuration () / android: продолжительность

Установка этого в AnimationSet в коде WORKS (отменяет все длительности анимаций для детей), но не при включении в тег в XML

SetFillAfter () / android: fillAfter

Это работает как в коде, так и в XML для тега. Как ни странно, я получил его и работать без необходимости устанавливать fillEnabled в true.

SetFillBefore () / android: fillBefore

Кажется, не имеет никакого эффекта / игнорируется как в коде, так и в XML

SetFillEnabled () / android: fillEnabled

Кажется, не имеет никакого эффекта / игнорируется как в коде, так и в XML. Я все еще могу получить fillAfter, чтобы работать даже без включения fillEnabled или установки fillEnabled на false.

SetStartOffset () / android: startOffset

Это работает только в коде, а не в XML.

Излишне говорить, что это вызывает много лишних разочарований.

Попробуйте следующие коды. В предыдущем ответе отсутствует repeatMode = "-1". Затем вы увидите, что изображение пульсирует бесконечно, не используя прослушиватель.

В res / anim / pulsate.xml:

 <?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android" > <scale xmlns:android="http://schemas.android.com/apk/res/android" android:duration="1000" android:fromXScale="0.5" android:fromYScale="0.5" android:pivotX="50%" android:pivotY="50%" android:repeatMode="reverse" android:repeatCount="-1" android:toXScale="1.0" android:toYScale="1.0" /> 

В java-файле:

 Animation animPulsate = AnimationUtils.loadAnimation(JoinRecipeClubActivity.this, R.anim.pulsate); ImageView ivFinger = (ImageView) findViewById(R.id.wivFinger); ivFinger.startAnimation(animPulsate);