SwipeRefreshLayout:滑动进度动画

时间:2014-06-07 17:20:11

标签: android listview android-animation swiperefreshlayout

我对Android很新,我正在谷歌网站上探索示例代码。我目前使用的代码是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并没有真正说出任何事情。

2 个答案:

答案 0 :(得分:24)

无法更改动画。

SwipeRefreshLayout中,您无法自定义;我相信这是Google试图让开发人员坚持常见模式的尝试。您可以设置样式的是动画的四种颜色,使用setColorScheme()指定。

SwipeRefreshLayout会为您显示其预定义动画。这可能是canChildScrollUp()返回false并且用户“下拉”或者设置setRefreshing(true)时。使用setRefreshing(false)关闭动画。将您的逻辑放在侦听器的方法onRefreshing()中。如果您在canChildScrollUp()中放置了不是ListView的内容,请覆盖SwipeRefreshLayout。你应该好好离开这里。

答案 1 :(得分:11)

虽然您无法更改它,但您仍然可以隐藏它,然后在触发后显示您自己的: - )

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),否则onRefresh不会再次触发。