Анимация значков панели инструментов - странное поведение - PullRequest
0 голосов
/ 17 октября 2019

Я анимирую значок «Обновить» на панели инструментов моего приложения. Я использую обозреватель LiveData для обновления пользовательского интерфейса, чтобы отразить, выполняется ли сетевая операция, и я хотел бы запустить и остановить анимацию (простое непрерывное вращение) оттуда, вызывая View.startAnimation(...) и View.clearAnimation().

Моя проблема в том, что когда вызывается clearAnimation(), у меня остаются две версии значка - одна вращающаяся, а другая нет - накладываются друг на друга.

Вот кодкоторый я хочу обработать, запуская / останавливая анимацию, из моей деятельности onCreate():

    viewModel.getNetworkState().observe(this, new Observer<Integer>()
    {
        @Override
        public void onChanged(Integer networkState)
        {
            if (refreshToolbarView != null) {
                if (networkState == NetworkState.IN_PROGRESS) {
                    refreshToolbarView.startAnimation(getRotationAnimation());
                }
                else {
                    refreshToolbarView.clearAnimation();
                }
            }
        }
    });

Ссылка на значок получена в onCreateOptionsMenu():

    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.menu_activity_main, menu);

    MenuItem item = menu.findItem(R.id.menu_refresh);
    refreshToolbarView = (ImageView) item.getActionView();

А здесьявляется соответствующей частью определения меню:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:tools="http://schemas.android.com/tools"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <item
        android:id="@+id/menu_refresh"
        android:title="@string/refresh"
        app:actionViewClass="android.widget.ImageView"
        app:showAsAction="always"
        tools:ignore="AlwaysShowAction"
        />
</menu>

Для полноты вот анимация:

<?xml version="1.0" encoding="utf-8"?>
<rotate
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="0"
    android:toDegrees="-360"
    android:pivotX="50%"
    android:pivotY="50%"
    android:duration="1000"
    android:interpolator="@android:anim/linear_interpolator"
    >
</rotate>

В качестве эксперимента я попытался запустить и остановить анимацию из OnClickListener на самой иконке ImageView, и она отлично работает - так что с наблюдателем LiveData происходит что-то смешное.

Просто для любопытства я также добавил refreshToolbarView.setVisibility(View.INVISIBLE); после refreshToolbarView.clearAnimation(); -а затем не анимированныйверсия значка исчезла, но бесконечно вращающийся остался видимым.

Любая помощь или указатели будут с благодарностью!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...