Android万能下拉刷新控件SwipeRefleshLayout使用

来源:互联网 发布:张惠妹彩虹 知乎 编辑:程序博客网 时间:2024/06/04 19:44

在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了

0 0
原创粉丝点击