AnimatedVectorDrawable не в состоянии запуска - PullRequest
0 голосов
/ 31 октября 2018

У меня есть действие с настраиваемым 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>

1 Ответ

0 голосов
/ 31 октября 2018

Ваш заказ ImageView должен расширяться AppCompatImageView.

Это нормально работает при использовании обычного ImageView в макете, потому что AppCompat автоматически заменяет ImageView на AppCompatImageView.

...