zoukankan      html  css  js  c++  java
  • Android-PullToRefresh(一)

    先讲下这篇写啥东西,也就是这家伙(chrisbanes)写的一个上拉下拉刷新的Demo,连接https://github.com/fengcunhan/Android-PullToRefresh

    东西弄下来之后,会看到library和sample 2个文件夹,至于library怎么用,先看看官网的资料http://developer.android.com/tools/projects/projects-eclipse.html#ReferencingLibraryProject

    注意:如果勾选了library,那么这个项目是不能运行的,会提示:android library projects cannot be launched。所以注意了。

    其实library怎么用,很简单,就是你新建个Android项目,在其他项目中复制.classpath和.project文件到library下面,使之成为一个Android项目(只是这个项目是被引用的项目),如果你不怕麻烦也可以新建一个Android项目,把有用的文件对应拷贝到新建的Android项目中。

    sample文件夹也一样。在该例子中有4个,PullToRefreshExpandableListActivity,PullToRefreshGridActivity,PullToRefreshListActivity,PullToRefreshWebViewActivity

    在应用开发中最常用的当属 PullToRefreshListActivity

    接下来贴点代码如何把这个例子搬到自己的项目中:代码来源library中的,

    com.handmark.pulltorefresh.library.internal.EmptyViewMethodAccessor

    com.handmark.pulltorefresh.library.internal.LoadingLayout

    com.handmark.pulltorefresh.library.PullToRefreshAdapterViewBase<T extends AbsListView>

    com.handmark.pulltorefresh.library.PullToRefreshBase<T extends View>

    com.handmark.pulltorefresh.library.PullToRefreshListView

    这里面的5个类就可以组建你想要的上拉下拉组件,当然还需要一些res文件了

    当然也需要改动:

         com.handmark.pulltorefresh.library.PullToRefreshBase类中

    private void init(Context context, AttributeSet attrs) {
    
            setOrientation(LinearLayout.VERTICAL);
    
            touchSlop = ViewConfiguration.getTouchSlop();
    
            // Styleables from XML first
            //final TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.PullToRefresh);
            //mode = a.getInteger(R.styleable.PullToRefresh_mode, MODE_PULL_DOWN_TO_REFRESH);
            //Styleables from XML modify last
            mode = 0x3;
            
            
            // Refreshable View
            // By passing the attrs, we can add ListView/GridView params via XML
            refreshableView = this.createRefreshableView(context, attrs);
            this.addRefreshableView(context, refreshableView);
    
            // Loading View Strings
            String pullLabel = context.getString(R.string.pull_to_refresh_pull_label);
            String refreshingLabel = context.getString(R.string.pull_to_refresh_refreshing_label);
            String releaseLabel = context.getString(R.string.pull_to_refresh_release_label);
    
            // Add Loading Views
            if (mode == MODE_PULL_DOWN_TO_REFRESH || mode == MODE_BOTH) {
                headerLayout = new LoadingLayout(context, MODE_PULL_DOWN_TO_REFRESH, releaseLabel, pullLabel,
                        refreshingLabel);
                addView(headerLayout, 0, new LinearLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,
                        ViewGroup.LayoutParams.WRAP_CONTENT));
                measureView(headerLayout);
                headerHeight = headerLayout.getMeasuredHeight();
            }
            if (mode == MODE_PULL_UP_TO_REFRESH || mode == MODE_BOTH) {
                footerLayout = new LoadingLayout(context, MODE_PULL_UP_TO_REFRESH, releaseLabel, pullLabel, refreshingLabel);
                addView(footerLayout, new LinearLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,
                        ViewGroup.LayoutParams.WRAP_CONTENT));
                measureView(footerLayout);
                headerHeight = footerLayout.getMeasuredHeight();
            }
    
            // Styleables from XML modify first
            /*if (a.hasValue(R.styleable.PullToRefresh_headerTextColor)) {
                final int color = a.getColor(R.styleable.PullToRefresh_headerTextColor, Color.BLACK);
                if (null != headerLayout) {
                    headerLayout.setTextColor(color);
                }
                if (null != footerLayout) {
                    footerLayout.setTextColor(color);
                }
            }
            if (a.hasValue(R.styleable.PullToRefresh_headerBackground)) {
                this.setBackgroundResource(a.getResourceId(R.styleable.PullToRefresh_headerBackground, Color.WHITE));
            }
            if (a.hasValue(R.styleable.PullToRefresh_adapterViewBackground)) {
                refreshableView.setBackgroundResource(a.getResourceId(R.styleable.PullToRefresh_adapterViewBackground,
                        Color.WHITE));
            }
            a.recycle();*/
            //Styleables from XML modify last
            if (null != headerLayout) {
                headerLayout.setTextColor(Color.BLACK);
            }
            if (null != footerLayout) {
                footerLayout.setTextColor(Color.BLACK);
            }
            
            // Hide Loading Views
            switch (mode) {
                case MODE_BOTH:
                    setPadding(0, -headerHeight, 0, -headerHeight);
                    break;
                case MODE_PULL_UP_TO_REFRESH:
                    setPadding(0, 0, 0, -headerHeight);
                    break;
                case MODE_PULL_DOWN_TO_REFRESH:
                default:
                    setPadding(0, -headerHeight, 0, 0);
                    break;
            }
    
            // If we're not using MODE_BOTH, then just set currentMode to current
            // mode
            if (mode != MODE_BOTH) {
                currentMode = mode;
            }
        }


    修改前和修改后的代码都有注释

    至于这个组件该怎么用还是自己琢磨把///

    欢迎拍砖

    --------------------------------------------------------------------------

    前段时间由于工作太忙,故没有上传demo,特此补上...

     Threew_PullToRefresh-master.rar

    ------------------------------------------------------------------------

    最近在网上查了点资料,关于Android Library的参考资料

    官网的资料

    Android Library

    Android 公共库的建立方法

    github入门到精通

  • 相关阅读:
    今天整理了一下博客文章
    让我们猜猜明天凌晨一点NASA会有什么重大消息公布?
    微软2010 PDC Party郑州社区行
    记一次Shiro反序列化到远程桌面
    从公有云到渗透进内网漫游
    华为云CTF cloud非预期解之k8s渗透实战
    记一次任意文件下载到getshell
    记一次失败的实战渗透
    Subversion for Windows 安装配置
    使用Fiddler2录制HTTP操作脚本
  • 原文地址:https://www.cnblogs.com/royi123/p/3275637.html
Copyright © 2011-2022 走看看