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

  • 内容
  • 评论
  • 相关

github地址

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

compile 'in.srain.cube:ultra-ptr:1.0.11

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

//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>
//代码中配置
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);

代码示例:

    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

 

评论

0条评论

发表评论

电子邮件地址不会被公开。