#android #animation #view #imageview #sequence
#Android #Анимация #Вид #просмотр изображения #последовательность
Вопрос:
В настоящее время я пытаюсь анимировать карточную игру, используя AnimationSet из анимаций перевода и поворота. Хотя я использую setFillAfter (true) и вижу, что карта заметно перемещается и остается в своем новом положении, фактическое положение ImageView все еще находится в его старом местоположении.
В документации Google говорится:
Примечание: Независимо от того, как ваша анимация может перемещаться или изменять размер, границы вида, в котором содержится ваша анимация, не будут автоматически подстраиваться под нее. Даже в этом случае анимация все равно будет выведена за пределы своего вида и не будет обрезана. Однако произойдет отсечение, если анимация выйдет за пределы родительского представления.
Это означает, что все мои старые onClickListeners и т.д. По-прежнему ассоциируются со старой позицией, а не с недавно обновленным визуальным представлением, и любая новая анимация, применяемая к представлению, происходит из исходного места, а не из вновь расположенного.
Каков наилучший способ получить эффект, которого я добиваюсь (карта, скользящая из моей руки в центр экрана, что является другим линейным отображением, а затем в более поздней последовательности, скользящая с этого места за пределы экрана)?
Я знаю, что то, что я ищу, возможно, поскольку люди в bytesequencing.com они добились этого плавного эффекта анимации в своей игре для Android «Hearts! (бесплатно)», который я обнаружил на рынке.
Спасибо!
Комментарии:
1. Вы могли бы создать объект LayoutParams с информацией, описывающей новое положение, а затем передать его view.setLayoutParams().
2. Только это не привело бы к желаемой анимации и было бы чрезмерно подробным, поскольку весь макет действия необходимо было бы воссоздать заново, поскольку ImageView переходит в другой раздел LinearLayout нашего макета «таблица».
3. Вы делаете это из onAnimationEnd () внутри прослушивателя, который вы прикрепляете к своей анимации. И вам не нужно было бы переделывать все действие, просто ImageView, который вы используете. Layout.removeView (yourImageView) и otherLayout.addView (yourImageView) — это то, что вы бы использовали, чтобы перенести его из одного макета в другой. Вероятно, это не самый чистый способ справиться с этой ситуацией. Но у меня есть проект, который анимирует ImageView аналогичным образом, и вот как я этого добился.
4. Спасибо за помощь, Тим. Я проведу эксперимент, чтобы увидеть, как это работает. Когда вы добавляете View, как вы добавляете его в точные координаты, где закончилась анимация? Кроме того, это не создает видимого мерцания или оно кажется плавным?
5. вам нужно будет создать свой объект LayoutParams, чтобы поместить view в то же место, где view находится после завершения анимации. Затем вызовите .setLayoutParams(), а затем layout.addView(). Для меня это не создает заметного эффекта мерцания.