我有一个具有自定义ImageView的activity和一个用于打开同一activity的新实例的按钮。单击ImageView开始AnimatedVectorDrawable的动画。
问题是,如果我在第一个活动中播放动画,它将以结束状态出现在下一个活动中。如果我不在第一个活动中播放动画,或者如果我使用常规的ImageView,就不会发生这种情况。
API19中的AnimatedVectorDrawableCompat也不会出现这个问题。
出现这种行为的原因是什么?
活动:
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)
}
}
}自定义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>发布于 2018-10-31 21:25:38
您的自定义ImageView必须扩展AppCompatImageView。
在布局中使用常规ImageView时,这很好用,因为AppCompat会自动将ImageView替换为AppCompatImageView。
https://stackoverflow.com/questions/53081607
复制相似问题