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 не сработает снова.