Kotlin Animations не меняет границы элемента - PullRequest
0 голосов
/ 10 января 2019

Я начинаю изучать Kotlin для Android. Я пытаюсь сделать простую анимацию, где логотип уменьшается до 0,2 от его размера и идет вверх и влево от экрана.

Я заметил, что есть два способа сделать это: через файл анимации xml и метод apply ().

//Using the animation xml file
    val animation: Animation = AnimationUtils.loadAnimation(this@AdicionarItemActivity, R.anim.splash_logo);


    iv_splash_logo.startAnimation(animation)

    //Using the apply method
    iv_splash_logo.apply {
        alpha = 0f
        visibility = View.VISIBLE
        animate()
            .scaleX(0.2f)
            .scaleY(0.2f)
            .alpha(1f)
            .setDuration(1000)
            .setListener(object : AnimatorListenerAdapter() {
                override fun onAnimationEnd(animation: Animator?) {
                    iv_splash_logo.apply {
                        animate()
                            .setDuration(1000)
                            .translationYBy(-100f)
                            .translationX(-400f)
                            .translationY(-700f)
                    }

                }
            })
    }

Код файла анимации:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:duration="2500"
     android:fillAfter="true">
    <scale
        android:fromXScale="1"
        android:fromYScale="1"
        android:toXScale="0.2"
        android:toYScale="0.2"
    />
    <translate
        android:fromXDelta="0%p"
        android:fromYDelta="0%p"
        android:toXDelta="-5%p"
        android:toYDelta="-5                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             %p"/>
</set>

Проблема двойная, действительно: 1) При использовании файла анимации происходит анимация, но физические границы объекта остаются прежними. Я имею в виду, что если я добавлю OnCLickListener, я могу вызвать его, если щелкну там, где раньше находилось изображение, а не туда, куда оно переместилось после анимации.

2) Метод apply () не является наилучшей практикой, поскольку вложение нескольких анимаций через AnimatorListenerAdapter делает код нечитаемым и уродливым. Но границы объекта физически движутся вместе с анимацией, что я и хочу сделать.

В конце концов, основная цель - изменить размер и переместить логотип из центра, где он заполняет большую часть области экрана, и иметь возможность щелкнуть его, чтобы выполнить какое-либо действие. Файл анимации не позволяет мне сделать это, потому что я могу щелкнуть там, где раньше было , и по-прежнему вызывать метод Click.

Какой лучший способ сделать анимацию? Можно ли переместить границы объекта с помощью анимации, когда я использую файл анимации?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...