У меня есть Активность, которая должна отображать GIF, когда за ней происходят тяжелые вещи. Я не обращаюсь к спа sh экранам. Gif находится в том же макете, что и другие представления.
Вариант использования: 1. Активность запускается, и я устанавливаю видимость представления, где GIF стоит, на TRUE 2. Запуск службы Forground и некоторые запросы (asyn c) на сервер сделаны для получения контента (блоки GIF здесь, и я не знаю почему) 3. После того, как служба завершает сетевые задания, вызывается обратный вызов, и представление с GIF устанавливается в GONE.
Если я заменю gif на ProgressBar, замораживание не произойдет. Он вращается, пока я не установлю его на GONE.
Я использую Glide, чтобы отобразить GIF. Вот код активности - xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/inject_content"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<!-- <pl.droidsonroids.gif.GifImageView-->
<!-- android:visibility="gone"-->
<!-- android:id="@+id/view_download_progress"-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="match_parent"-->
<!-- android:background="@color/white"-->
<!-- android:src="@drawable/service_download_content"/>-->
<ProgressBar
android:visibility="gone"
android:id="@+id/view_download_progress"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true"
android:background="@color/white"/>
<!-- <ImageView-->
<!-- android:visibility="gone"-->
<!-- android:id="@+id/view_download_progress"-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="match_parent"-->
<!-- android:background="@color/white" />-->
</RelativeLayout>
ОБНОВЛЕНИЕ: так я переключаю видимость
ImageView downloadProgress = findViewById(R.id.view_download_progress);
if (value) {
Glide.with(getContext()).asGif().load(R.drawable.test).into(downloadProgress);
downloadProgress.setVisibility(View.VISIBLE);
} else {
downloadProgress.setVisibility(View.GONE);
}
ОБНОВЛЕНИЕ2: прокомментированный метод выполняет тяжелую работу SQLite после обратного вызова дооснащения вызывается внутри задания, которое выполняется внутри службы. GIF не замерзнет, если я сделаю это.
override fun onResponse(call: Call<ObjectsSchema>, response: Response<ObjectsSchema>) {
val cmsContent = response.body() as ObjectsSchema
// handleContent(cmsContent)
notifyOnDownloadSucceded()
}