为什么这个 android 动画没有做任何事情?
Why isn't this android animation doing anything?
我正在尝试使用 Android 属性 动画师的较新样式(而不是旧的视图动画)来创建动画以水平摇动视图。
我在 /res/animator/shake.xml
中编写了以下 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()
}
}
然而,当我调用动画时,没有任何反应,我不确定为什么。
不要将 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
您正在应用动画。
我正在尝试使用 Android 属性 动画师的较新样式(而不是旧的视图动画)来创建动画以水平摇动视图。
我在 /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()
}
}
然而,当我调用动画时,没有任何反应,我不确定为什么。
不要将 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
您正在应用动画。