SwipeRefreshLayout: анимация прогресса прокрутки

Я совершенно новый для Android, и я изучаю пример кода на веб-сайте google. Код, в котором я сейчас включен, - это SwipeRefreshLayout: http://developer.android.com/samples/SwipeRefreshLayoutBasic/index.html

В коде мы видим, что SwipeRefreshLayout выполняется для списка, так что, если вы перетаскиваете представление списка, метод запускается, и listview обновляется.

<android.support.v4.widget.SwipeRefreshLayout
      xmlns:android="http://schemas.android.com/apk/res/android"
      android:id="@+id/swiperefresh"
      android:layout_width="match_parent"
      android:layout_height="match_parent">

    <ListView
          android:id="@android:id/list"
          android:layout_width="match_parent"
          android:layout_height="match_parent" />

</android.support.v4.widget.SwipeRefreshLayout>

Что меня пугает, так это то, что в коде для макета анимации прогресса не отображается макет, который отображается в верхней части списка, когда вы перетаскиваете его. Считаете ли вы, что SwipeRefreshLayout автоматически создает панель анимации прогресса при ее перетаскивании, не требуя от пользователя указать какой-либо макет в xml для него?

Например, если вы хотите поместить прописку на обоих концах полосы анимации прогресса, чтобы анимация не касалась концов экрана при обновлении, как это сделать?

https://developer.android.com/reference/android/support/v4/widget/SwipeRefreshLayout.html на самом деле ничего не говорит об этом.

Ответ 1

Вы не можете изменить анимацию.

В SwipeRefreshLayout вы не можете настроить многое; Я считаю, что это попытка Google заставить разработчиков придерживаться общих паттернов. То, что вы можете стиль, это четыре цвета анимации, указанные с помощью setColorScheme().

SwipeRefreshLayout позаботится о том, чтобы показать свою предопределенную анимацию. Это может быть, когда canChildScrollUp() возвращает false, а пользователь "сбрасывает", или когда вы устанавливаете setRefreshing(true). Выключите анимацию с помощью setRefreshing(false). Поместите свою логику в метод onRefreshing() слушателя. Переопределите canChildScrollUp(), если вы поместите то, что не является ListView в SwipeRefreshLayout. Вы должны быть добры, чтобы идти отсюда.

Ответ 2

хотя вы не можете его изменить, вы все равно можете скрыть его, а затем отобразить свой собственный после срабатывания: -)

SwipeRefreshLayout swiperefresh = (SwipeRefreshLayout)root.findViewById(R.id.swiperefresh);
swiperefresh.setOnRefreshListener(this);
swiperefresh.setColorSchemeColors(0,0,0,0);
swiperefresh.setProgressBackgroundColor(android.R.color.transparent); 

Примечания:

  • в eclipse вы должны добавить @SuppressLint ( "ResourceAsColor" ), чтобы скомпилировать это.

  • вам все равно нужно вызвать setRefreshing (false) в соответствующий момент времени еще раз. Refresh не запускается снова.