Почему эта анимация для Android ничего не делает? - PullRequest
0 голосов
/ 21 сентября 2018

Я пытаюсь использовать более новый стиль аниматоров свойств Android (а не более старые анимации представления), чтобы создать анимацию, чтобы встряхнуть представление по горизонтали.

Я написал следующий аниматор XML в /res/animator/shake.xml

<?xml version="1.0" encoding="utf-8"?>
<objectAnimator
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:propertyName="translationX"
    android:duration="100"
    android:valueFrom="0f"
    android:valueTo="20f"
    android:valueType="floatType"
    android:interpolator="@android:anim/linear_interpolator"
    android:repeatCount="7"
    android:repeatMode="reverse"/>

Я создал следующий метод расширения Kotlin для воспроизведения анимации в любом представлении:

fun View.shake() {
    AnimatorInflater.loadAnimator(context, R.animator.shake).apply {
        setTarget(this)
        start()
    }
}

Однако, когда я вызываю анимацию, ничего не происходит, и яне знаю почему.

1 Ответ

0 голосов
/ 21 сентября 2018

Не помещайте setTarget(this) и start() в apply{}

Замените свой код следующим:

fun View.shake() {
    val al = AnimatorInflater.loadAnimator(context, R.animator.shake)
    al.setTarget(this)
    al.start()
}

Или вы можете сделать:

AnimatorInflater.loadAnimator(context, R.animator.shake).apply {
        setTarget(this@shake)
        start()
    }

Ранее this имел в виду AnimatorInflater.loadAnimator, а не View, поэтому просто замените его на this@shake, чтобы сослаться на view, к которому вы применяете анимацию.

...