在Android开发中下拉刷新功能是很常见的一个功能,通常意义而言只有像列表类才具有下拉刷新功能,像ListView,RecyclerView,可以给他们加载一个头布局和尾部局的样式来实现上下拉刷新,有一些第三方的类库就是通过这样的方式来实现的上下拉刷新,比如XListView,PullToReflesh等,但是如果是一个普通的页面怎么来实现下拉刷新呢,嗯 这是个问题
我觉得实现思路不外乎以下几种,
First:自定义一个ScrollView,通过监听他下拉的距离来刷新界面,比较类似于这个广告和标题的上拉悬停
Second:对最外层的下拉距离进行控制
Three:看看有没有啥现成的东西是可以使用的
通过查资料看到Google推出了一种新控件叫SwipeRefleshLayout以实现下拉刷新
SwipeRefleshLayout是V4包里边的东西,向下兼容到Android2.2,所以可以放心大胆的用了哦
只不过要注意的是此布局内只能有一个直接子View。
所以我们可以在其中放置一个布局或者一个列表,只要只有一个View就可以了,他这一点跟ScrollView一样
其实通过文档我们可以知道SwipeRefreshLayout只不过是继承了ViewGroup。
package com.longyue.swiperefreshlayoutdemo;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.app.AppCompatActivity;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* 只不过要注意的是此布局内只能有一个直接子View。
* 其实通过文档我们可以知道SwipeRefreshLayout只不过是继承了ViewGroup。
* */
public class MainActivity extends AppCompatActivity implements SwipeRefreshLayout.OnRefreshListener{
private static final int REFRESH_COMPLETE = 0X110;
private SwipeRefreshLayout mSwipeLayout;
private ListView mListView;
private ArrayAdapter<String> mAdapter;
private List<String> mDatas = new ArrayList<String>(Arrays.asList("Java", "Javascript", "C++", "Ruby", "Json",
"HTML"));
private Handler mHandler = new Handler() {
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case REFRESH_COMPLETE:
mDatas.addAll(Arrays.asList("Lucene", "Canvas", "Bitmap"));
mAdapter.notifyDataSetChanged();
mSwipeLayout.setRefreshing(false);//设置组件的刷洗状态。
break;
}
}
};
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mListView = (ListView) findViewById(R.id.id_listview);
mSwipeLayout = (SwipeRefreshLayout) findViewById(R.id.id_swipe_ly);
mSwipeLayout.setOnRefreshListener(this);//:设置手势滑动监听器。
mSwipeLayout.setColorSchemeColors(//设置进度动画的颜色
R.color.swipe_color_1,
R.color.swipe_color_2,
R.color.swipe_color_3,
R.color.swipe_color_4);
mSwipeLayout.setSize(SwipeRefreshLayout.LARGE);//设置进度圈的大小,只有两个值:DEFAULT、LARGE
//mSwipeLayout.setProgressBackgroundColorSchemeColor(getResources().getColor(R.color.swipe_background_color));
mSwipeLayout.setProgressBackgroundColor(R.color.swipe_background_color);
//mSwipeLayout.setPadding(20, 20, 20, 20);
//mSwipeLayout.setProgressViewOffset(true, 100, 300);//控制下拉刷新图标的活动范围
//mSwipeLayout.setDistanceToTriggerSync(30);//触发下拉刷新的距离
mSwipeLayout.setProgressViewEndTarget(true, 300);//下拉图标结束的结束的位置
mAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, mDatas);
mListView.setAdapter(mAdapter);
}
public void onRefresh() {
mHandler.sendEmptyMessageDelayed(REFRESH_COMPLETE, 2000);
}
}
引用的色值资源
<color name="swipe_color_1">#B6DB49</color>
<color name="swipe_color_2">#99CC00</color>
<color name="swipe_color_3">#8ABD00</color>
<color name="swipe_color_4">#7CAF00</color>
<color name="swipe_background_color">#ccc</color>
代码就这么多,就不传Demo了