У меня есть действие с настраиваемым ImageView и кнопка, которая открывает новый экземпляр того же действия. Нажмите на ImageView, чтобы запустить анимацию AnimatedVectorDrawable.
Проблема в том, что если я воспроизведу анимацию в первом упражнении, она будет отображаться в следующих действиях в ее конечном состоянии. Этого не произойдет, если я не буду воспроизводить анимацию в первом упражнении или если я использую обычный ImageView.
Проблема также не возникает с AnimatedVectorDrawableCompat в API 19.
В чем причина такого поведения?
Активность:
class TestActivity: AppCompatActivity() {
companion object {
fun start(context: Context){
context.startActivity(Intent(context, TestActivity::class.java))
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_test)
myImageView.setOnClickListener {
(myImageView.drawable as? Animatable)?.start()
}
button.setOnClickListener {
TestActivity.start(this)
}
}
}
Custom ImageView:
class MyImageView (context: Context, attrs: AttributeSet?) : ImageView(context, attrs) {
init {
val anim = ContextCompat.getDrawable(context, R.drawable.anim)
setImageDrawable(anim)
}
}
Ресурс анимации:
<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt" >
<aapt:attr name="android:drawable">
<vector
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:name="path"
android:strokeColor="#fff"
android:strokeWidth="2"
android:pathData="M 3, 7 L 21, 7 M 3, 12 L 21, 12 M 3, 17 L 21, 17"/>
</vector>
</aapt:attr>
<target android:name="path" >
<aapt:attr name="android:animation">
<set android:interpolator="@android:anim/accelerate_decelerate_interpolator">
<objectAnimator
android:duration="200"
android:propertyName="pathData"
android:valueFrom="M 3, 7 L 21, 7 M 3, 12 L 21, 12 M 3, 17 L 21, 17"
android:valueTo="M 5.5, 5.5 L 12,12 M 5.5, 18.5 L 18.5, 5.5 M 12,12 L 18.5, 18.5"
android:valueType="pathType"/>
</set>
</aapt:attr>
</target>
</animated-vector>