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 не запускается снова.