android-Ultra-Pull-To-Refresh既可以实现下拉刷新又可以上拉加载的国人写的优秀库

github地址:android-Ultra-Pull-To-Refresh           


首先和一般的库引入方法一样,在grade中添加依赖:

compile 'in.srain.cube:ptr-load-more:1.0.5'
compile 'in.srain.cube:clog:1.0.2'
compile 'in.srain.cube:cube-sdk:1.0.44@aar'

然后使用代码:

xml中:

<include layout="@layout/title_bar_home"/>
<in.srain.cube.views.ptr.PtrClassicFrameLayout
    android:id="@+id/rotate_header_grid_view_frame"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.landi.zsg.customerview.HomeListView
        android:id="@+id/listview"
        android:layout_width="fill_parent"
        android:scrollbars="none"
        android:background="@color/white"
        android:divider="@null"
        android:layout_height="fill_parent" />
</in.srain.cube.views.ptr.PtrClassicFrameLayout>


java代码:

//设置自定义头部样式
UltraCustomerHeader.setUltraCustomerHeader(mPtrFrame, context);
//设置下拉刷新上拉加载
mPtrFrame.disableWhenHorizontalMove(true);//解决横向滑动冲突
mPtrFrame.setPtrHandler(new PtrDefaultHandler2() {

    @Override
    public void onRefreshBegin(PtrFrameLayout frame) {
        mPtrFrame.postDelayed(new Runnable() {
            @Override
            public void run() {
                mPtrFrame.refreshComplete();
            }
        }, 1000);
    }

    @Override
    public void onLoadMoreBegin(PtrFrameLayout frame) {
        mPtrFrame.postDelayed(new Runnable() {
            @Override
            public void run() {
                if(gridList.size() < 20){
                    HomeGridItemEntity entity = new HomeGridItemEntity();
                    entity.setImgUrl("http://a.vpimg4.com/upload/merchandise/pdc/148/726/239330151358726148/1/716304027001354-1.jpg");
                    entity.setBrand("ULTRA");
                    entity.setPrice(12356);
                    gridList.add(entity);
                    homeGridAdapter.notifyDataSetChanged();
                    gridView.setSelection(gridList.size());
                }else{
                    Toast.makeText(context,"不要拉了,我没东西啦",Toast.LENGTH_SHORT).show();
                }
                mPtrFrame.refreshComplete();
            }
        },1000);
    }

    @Override
    public boolean checkCanDoLoadMore(PtrFrameLayout frame, View content, View footer) {
        return super.checkCanDoLoadMore(frame, listView, footer);
    }

    @Override
    public boolean checkCanDoRefresh(PtrFrameLayout frame, View content, View header) {
        return super.checkCanDoRefresh(frame, listView, header);
    }
});

其中一下代码是我单独写了一个类设置自定义头部样式和一些配置

UltraCustomerHeader.setUltraCustomerHeader(mPtrFrame, context);
代码如下;

public class UltraCustomerHeader {

    /**
     * 设置自定义Header
     * @param mPtrFrame
     * @param context
     */
    public static void setUltraCustomerHeader(PtrClassicFrameLayout mPtrFrame,Context context){

        mPtrFrame.setLastUpdateTimeRelateObject(context);
        // the following are default settings
        mPtrFrame.setResistanceHeader(1.7f); // 您还可以单独设置脚,头
        mPtrFrame.setRatioOfHeaderHeightToRefresh(1.2f);
        mPtrFrame.setDurationToClose(1000);  // 您还可以单独设置脚,头
        // default is false
        mPtrFrame.setPullToRefresh(false);

        // default is true
        mPtrFrame.setKeepHeaderWhenRefresh(true);
        //以下为自定义header需要
        StoreHouseHeader header = new StoreHouseHeader(context);
        header.setPadding(0, LocalDisplay.dp2px(20), 0, LocalDisplay.dp2px(20));
        header.setTextColor(context.getResources().getColor(R.color.luxury_gold));
        header.initWithString("ZSG");
        mPtrFrame.setDurationToCloseHeader(1500);
        mPtrFrame.setHeaderView(header);
        mPtrFrame.addPtrUIHandler(header);
        mPtrFrame.setBackgroundColor(context.getResources().getColor(R.color.black_gray));
    }
}


使用起来极其简单,而且它本身是一个ViewGroup,里面可以放任何布局view,但是有一个冲突需要解决,就是滑动冲突,我遇到了横向的滑动冲突,问人家要了解决方法就是下面这句代码:

mPtrFrame.disableWhenHorizontalMove(true);//解决横向滑动冲突

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值