前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >android-Ultra-Pull-To-Refresh基础教程

android-Ultra-Pull-To-Refresh基础教程

作者头像
用户4458175
发布2020-02-12 16:38:09
7560
发布2020-02-12 16:38:09
举报
文章被收录于专栏:andy的小窝andy的小窝

github地址

引入android-Ultra-Pull-To-Refresh依赖:

代码语言:javascript
复制
compile 'in.srain.cube:ultra-ptr:1.0.11

* 6个参数可配置: * 阻尼系数:默认1.7f,越大,感觉下拉时越吃力。 * 触发刷新时移动的位置比例:默认,1.2f,移动达到头部高度1.2倍时可触发刷新操作。 * 回弹延时:默认 200ms,回弹到刷新高度所用时间 * 头部回弹时间:默认1000ms * 刷新是保持头部:默认值 true. * 下拉刷新 / 释放刷新,默认为释放刷新

代码语言:javascript
复制
//xml中配置
<in.srain.cube.views.ptr.PtrFrameLayout
    android:id="@+id/store_house_ptr_frame"
    xmlns:cube_ptr="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"

    cube_ptr:ptr_resistance="1.7"
    cube_ptr:ptr_ratio_of_header_height_to_refresh="1.2"
    cube_ptr:ptr_duration_to_close="300"
    cube_ptr:ptr_duration_to_close_header="2000"
    cube_ptr:ptr_keep_header_when_refresh="true"
    cube_ptr:ptr_pull_to_fresh="false" >

    <LinearLayout
        android:id="@+id/store_house_ptr_image_content"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/cube_mints_333333"
        android:clickable="true"
        android:padding="10dp">

        <in.srain.cube.image.CubeImageView
            android:id="@+id/store_house_ptr_image"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </LinearLayout>

</in.srain.cube.views.ptr.PtrFrameLayout>
代码语言:javascript
复制
//代码中配置
mPtrFrame.setResistance(1.7f);
mPtrFrame.setRatioOfHeaderHeightToRefresh(1.2f);
mPtrFrame.setDurationToClose(200);
mPtrFrame.setDurationToCloseHeader(1000);
// default is false
mPtrFrame.setPullToRefresh(false);
// default is true
mPtrFrame.setKeepHeaderWhenRefresh(true);

代码示例:

代码语言:javascript
复制
    public void initViews() {
        ptr = (PtrFrameLayout) view.findViewById(R.id.store_house_ptr_frame);
        // 刷新时,保持内容不动,仅头部下移
//        ptr.setPinContent(true);

        // PtrFrameLayout代码配置属性方式
//        // the following are default settings
//        mPtrFrame.setResistance(1.7f);
//        mPtrFrame.setRatioOfHeaderHeightToRefresh(1.2f);
//        mPtrFrame.setDurationToClose(200);
//        mPtrFrame.setDurationToCloseHeader(1000);
//        // default is false
//        mPtrFrame.setPullToRefresh(false);
//        // default is true
//        mPtrFrame.setKeepHeaderWhenRefresh(true);

        /**
         * 下拉刷新头部-文字进度效果
         */
/*
        final StoreHouseHeader header1 = new StoreHouseHeader(view.getContext());
        //        //设置布局参数,-1指匹配父窗体,-2指包裹内容
        header1.setLayoutParams(new PtrFrameLayout.LayoutParams(-1, -2));
        //        //设置内边距...PtrLocalDisplay框架自带
       // header1.setPadding(0, PtrLocalDisplay.dp2px(15), 0, 0);

        // 头部使用的字符串,这里的字符串只能是 [A-Z 0-9 - .]
        //header1.initWithString("Loading");
        header1.initWithStringArray(R.array.storehouse);
        //header.initWithStringArray(R.array.storehouse);
        header1.setTextColor(Color.GREEN);
        header1.setBackgroundColor(Color.GRAY);
        ptr.setLastUpdateTimeRelateObject(this);
        //给下拉刷新设置下拉头部 StoreHouseHeader布局
        ptr.setHeaderView(header1);
        //        //添加一个UI时间处理回调函数。为MaterialHeader的内部实现回调。
        ptr.addPtrUIHandler(header1);
*/
        /**
         * 不设置头部,使用默认效果
         */

        PtrClassicDefaultHeader2 defaultHeader = new PtrClassicDefaultHeader2(getContext());
        defaultHeader.setLastUpdateTimeRelateObject(this);
//        给Ptr添加头布局
        ptr.setHeaderView(defaultHeader);
//        使头布局的状态和刷新状态同步
        ptr.addPtrUIHandler(defaultHeader);
        //添加一个UI时间处理回调函数。为MaterialHeader的内部实现回调。
        ptr.addPtrUIHandler(defaultHeader);


        /**
         * 下拉刷新-转圈效果
         */
        // 创建一个MaterialHeader 的视图(该框架自带)
/*        final MaterialHeader header = new MaterialHeader(this);

        //可以设置一组 颜色数组,改变进度显示的颜色变化
        header.setColorSchemeColors(new int[]{Color.RED, Color.BLUE, Color.GRAY, Color.GREEN});
        //设置布局参数,-1指匹配父窗体,-2指包裹内容
        header.setLayoutParams(new PtrFrameLayout.LayoutParams(-1, -2));
        //设置内边距...PtrLocalDisplay框架自带
        header.setPadding(0, PtrLocalDisplay.dp2px(15), 0, PtrLocalDisplay.dp2px(10));
        //告诉创建一个MaterialHeader 布局绑定在那个下拉刷新控件上
        header.setPtrFrameLayout(frameLayout1);

        //给下拉刷新设置下拉头部 MaterialHeader布局
        frameLayout1.setHeaderView(header);
        //添加一个UI时间处理回调函数。为MaterialHeader的内部实现回调。
        frameLayout1.addPtrUIHandler(header);*/


        /**
         * 下拉刷新-文字进度效果
         */
        /*
       final StoreHouseHeader header1 = new StoreHouseHeader(view.getContext());
        //        //设置布局参数,-1指匹配父窗体,-2指包裹内容
        header1.setLayoutParams(new PtrFrameLayout.LayoutParams(-1, -2));
        //        //设置内边距...PtrLocalDisplay框架自带
        header1.setPadding(0, PtrLocalDisplay.dp2px(15), 0, 0);

        // 头部使用的字符串。这里的字符串只能是 [A-Z 0-9 - .]
        header1.initWithString("1000cf");
        header1.setTextColor(Color.GREEN);
        header1.setBackgroundColor(Color.GRAY);
        //给下拉刷新设置下拉头部 StoreHouseHeader布局
        ptr.setHeaderView(header1);
        //        //添加一个UI时间处理回调函数。为MaterialHeader的内部实现回调。
        ptr.addPtrUIHandler(header1);
        */
    }


    public void initEvents() {
        /**
         * 下拉刷新的事件监听回调方法
         * ServerSocket
         */
        /*
        ptr.setPtrHandler(new PtrDefaultHandler() {
            @Override
            public void onRefreshBegin(PtrFrameLayout frame) {
                new AsyncTask<String[],Void,Bitmap>(){
                    @Override
                    protected Bitmap doInBackground(String[]... params) {
                        Bitmap bitmap = null;
                        try {
                            URL url = new URL(urlStr);
                            URLConnection urlConnection = url.openConnection();
                            InputStream inputStream = urlConnection.getInputStream();
                            bitmap = BitmapFactory.decodeStream(inputStream);
                        } catch (MalformedURLException e) {
                            e.printStackTrace();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }

                        return bitmap;
                    }

                    @Override
                    protected void onPostExecute(Bitmap bitmap) {
                        imageView1.setImageBitmap(bitmap);
                        ptr.refreshComplete();
                    }
                }.execute();
            }
        });*/
        ptr.disableWhenHorizontalMove(false);
        ptr.setPtrHandler(new PtrHandler() {
            @Override
            public void onRefreshBegin(PtrFrameLayout frame) {
                frame.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        ptr.refreshComplete();
                    }
                }, 1800);
            }

            @Override
            public boolean checkCanDoRefresh(PtrFrameLayout frame, View content, View header) {
                // 默认实现,根据实际情况做改动
                return PtrDefaultHandler.checkContentCanBePulledDown(frame, content, header);
            }
        });
    }

将两个方法应用就可以实现刷新。

安卓定制刷新头部

waveview

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档