SwipeRefreshLayout: анимация движения смахивания

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

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

<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 самом деле ничего не говорит об этом.

2 ответа

Решение

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

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

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

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

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

Заметки:

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

  • вам все еще нужно вызвать setRefreshing(false) в соответствующий момент времени, иначе onRefresh не сработает снова.

Другие вопросы по тегам