Я анимирую значок «Обновить» на панели инструментов моего приложения. Я использую обозреватель 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();
-а затем не анимированныйверсия значка исчезла, но бесконечно вращающийся остался видимым.
Любая помощь или указатели будут с благодарностью!