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

在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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值