Загрузка данных от сторонних поставщиков необходима для большинства приложений Android. Эти данные обычно выбираются и загружаются в пользовательский интерфейс при запуске приложения. Хороший способ показать пользователю, что данные загружаются, - это наложение круга загрузки в пользовательском интерфейсе. Во время этого наложения вы не хотите, чтобы пользователь мог взаимодействовать с пользовательским интерфейсом до завершения загрузки.

Давайте рассмотрим один из способов разработки и реализации наложения колеса прогресса во время загрузки данных в вашем приложении.

Для этого я использовал библиотеку колеса прогресса материала, которую нашел на GitHub. Сначала добавьте это на уровень вашего приложения build.gradle.

implementation 'com.pnikosis:materialish-progress:1.7

Затем я создал XML-файл для отображения колеса прогресса как слоя, который я мог бы разместить поверх пользовательского интерфейса.

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:wheel="http://schemas.android.com/apk/res-auto"
    android:id="@+id/progress_overlay"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:alpha="0.4"
    android:animateLayoutChanges="true"
    android:background="@android:color/black"
    android:clickable="true"
    android:focusable="true"
    android:visibility="gone">

    <com.pnikosis.materialishprogress.ProgressWheel
        android:id="@+id/progress_wheel"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:clickable="true"
        android:layout_gravity="center"
        wheel:matProg_barColor="#5588FF"
        wheel:matProg_progressIndeterminate="true" />

</FrameLayout>

Включение двух строк ниже для FrameLayout предотвращает интерактивность пользовательского интерфейса. Также вы определенно хотите, чтобы это представление было невидимым, когда оно не используется, поэтому мы установили видимость как gone. С помощью этой библиотеки вы можете настроить визуальные атрибуты колеса прогресса, более подробную информацию можно найти в репозитории GitHub.

android:clickable="true" 
android:focusable="true"
android:visibility="gone"

Чтобы использовать это внутри любого макета во всем приложении, все, что вам нужно сделать, это включить его в XML-файл макета. Затем вы можете использовать код для управления видимостью.

<include layout="@layout/include_progress_overlay"/>

Чтобы этот макет отображался поверх пользовательского интерфейса во время загрузки, мы должны установить видимость как visible. Когда загрузка завершена, вы можете использовать метод обратного вызова, чтобы установить видимость invisible.

/* Progress overlay visible */
progressOverlay = findViewById(R.id.progress_overlay);
progressOverlay.setVisibility(View.VISIBLE);
...
...
...
public void setInvisible() {
     progressOverlay.setVisibility(View.INVISIBLE);
}
public void setVisible() {
     progressOverlay.setVisibility(View.VISIBLE);
}

Окончательный результат накладки показан ниже!

Подпишитесь на мой Twitter, если хотите быть в курсе моих текущих проектов. Вы инвестируете в криптовалюту? Оцените мое новое бета-приложение Veox - трекер криптовалютного портфеля!