Android知识Android开发Android技术知识

支持水平 、竖直nestedscroll刷新控件重构

2017-12-18  本文已影响0人  不听话好孩子

RefreshLayout

nestscroll Refreshing重构
支持水平 竖直双方向
Github地址

GIF.gif
GIF2.gif
GIF3.gif

xml

 <coms.kxjsj.refreshlayout_master.RefreshLayout
        android:id="@+id/Refresh"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:canFooter="true"
        app:footerID="@layout/footer_layout_horizontal"
        app:headerID="@layout/header_layout_horizontal"
        app:scrollID="@layout/xx" />

code

final RefreshLayout layout=findViewById(R.id.Refresh);
        layout.setListener(new RefreshLayout.Callback1<RefreshLayout.State>() {
            @Override
            public void call(RefreshLayout.State state) {
                super.call(state);
                if(state== RefreshLayout.State.REFRESHING||state== RefreshLayout.State.LOADING){
                    layout.postDelayed(new Runnable() {
                        @Override
                        public void run() {
                            layout.NotifyCompleteRefresh1(layout.findInHeaderView(R.id.textView).getMeasuredWidth()+10,"为你更新了很多信息");
                        }
                    },3000);
                }
            }
            @Override
            public void call(RefreshLayout.State state, int scroll) {
                super.call(state, scroll);
            }
        });
        RecyclerView recyclerView=layout.getmScroll();
        recyclerView.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL,false));
        recyclerView.setAdapter(new RecyclerView.Adapter() {
            @Override
            public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
                return new RecyclerView.ViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item,parent,false)) {
                    @Override
                    public String toString() {
                        return super.toString();
                    }
                };
            }

            @Override
            public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {

            }

            @Override
            public int getItemCount() {
                return 30;
            }
        });
        layout.setOrentation(RefreshLayout.Orentation.HORIZONTAL);

more properities

    <declare-styleable name="RefreshLayout">
        <attr name="canHeader" format="boolean" />
        <attr name="canFooter" format="boolean" />
        <attr name="overscroll" format="boolean" />
        <attr name="headerID" format="reference" />
        <attr name="scrollID" format="reference" />
        <attr name="footerID" format="reference" />

        <attr name="orentation" format="enum" >
            <enum name="HORIZONTAL" value="0"/>
            <enum name="VERTICAL" value="1"/>
        </attr>
        <attr name="mMaxHeadertScroll" format="dimension" />
        <attr name="mMaxFooterScroll" format="dimension" />
        <attr name="mHeaderRefreshPosition" format="dimension" />
        <attr name="mFooterRefreshPosition" format="dimension" />
        <attr name="mHeaderRefreshCompletePosition" format="dimension" />
        <attr name="mFooterLoadingCompletePosition" format="dimension" />
        <attr name="mFlingmax" format="dimension" />
        <attr name="delayCompleteTime" format="integer" />
    </declare-styleable>

GOLBAL SET

 RefreshLayout.init(new RefreshLayout.DefaultBuilder()
 .xxx
.xxx
 .setBaseRefreshWrap(MyRefreshWrap.class))
 .xxx
.xxx);

SELF RefreshWrap AS SAMPLE

public class MyRefreshWrap extends RefreshLayout.BaseRefreshWrap<String> {
    private ImageView mHeaderimageView;
    private TextView mHeadertextView;
    private ProgressBar mHeaderPrgress;
    private ImageView mFooterimageView;
    private TextView mfootertextView;
    private ProgressBar mfootPrgress;
    private WeakReference<RefreshLayout> layoutWeakReference;

    public RefreshLayout getRefreshLayout() {
        return layoutWeakReference.get();
    }

    private RefreshLayout.State currentState;
    String[] title;

    public void onPullHeader(View view, int scrolls) {
        /**
         * 完成状态时不要改变字
         */
        if(currentState== RefreshLayout.State.REFRESHCOMPLETE||currentState== RefreshLayout.State.REFRESHING){
            return;
        }
        if (mHeadertextView!=null&&scrolls > getRefreshLayout().getmHeaderRefreshPosition()) {
            mHeadertextView.setText(title[1]);
        } else {
            mHeadertextView.setText(title[0]);
        }

    }

    public void onPullFooter(View view, int scrolls) {
        /**
         * 完成状态时不要改变字
         */
        if(currentState== RefreshLayout.State.LOADINGCOMPLETE||currentState==RefreshLayout.State.LOADING){
            return;
        }
        if (mfootertextView!=null&&scrolls > getRefreshLayout().getmFooterRefreshPosition()) {
            mfootertextView.setText(title[4]);
        } else {
            mfootertextView.setText(title[3]);
        }
    }

    public void OnStateChange(RefreshLayout.State state) {
        currentState=state;
        switch (state) {
            case REFRESHCOMPLETE:
                mHeaderPrgress.setVisibility(View.INVISIBLE);
                mHeadertextView.setText(data);
                break;
            case LOADING:
                mfootPrgress.setVisibility(View.VISIBLE);
                mfootertextView.setText(title[5]);
                break;
            case REFRESHING:
                mHeaderPrgress.setVisibility(View.VISIBLE);
                mHeadertextView.setText(title[2]);
                break;
            case LOADINGCOMPLETE:
                mfootPrgress.setVisibility(View.INVISIBLE);
                mfootertextView.setText(data);
                break;
            case IDEL:
                break;
            case PULL_HEADER:
                break;
            case PULL_FOOTER:
                break;
        }

    }
    @Override
    protected void initView(RefreshLayout layout) {
        super.initView(layout);
        layoutWeakReference=new WeakReference<RefreshLayout>(layout);
        View header = layout.getmHeader();
        View footer = layout.getmFooter();
        if(header!=null) {
            mHeaderimageView = header.findViewById(R.id.imageView);
            mHeadertextView = header.findViewById(R.id.textView);
            mHeaderPrgress = header.findViewById(R.id.progressBar);
        }
        if(footer!=null) {
            mFooterimageView = footer.findViewById(R.id.imageView);
            mfootertextView = footer.findViewById(R.id.textView);
            mfootPrgress = footer.findViewById(R.id.progressBar);
        }
        String[] tempVertical={"下拉刷新", "释放刷新", "正在刷新中", "上拉加载", "释放加载", "正在加载中"};
        String[] tempHorizontal={"右拉刷新", "释放刷新", "正在刷新中", "左拉加载", "释放加载", "正在加载中"};
        title=(layout.getOrentation()== RefreshLayout.Orentation.VERTICAL)?
                tempVertical:tempHorizontal;
    }
}

上一篇下一篇

猜你喜欢

热点阅读