recyclerView的側拉效果。上拉載入。下拉重新整理,點選事件等等

yesye發表於2021-09-09

圖片描述

PtrSwipeMenuRecyclerView是一個可以側滑刪除。點選的。具備下拉重新整理。和


上拉載入的功能;


    recyclerView .setItemAnimator(new DefaultItemAnimator());可以設定


itemAnimator的變化;

  recyclerView.setLayoutManager(new LinearLayoutManager(this, 


LinearLayoutManager.VERTICAL, false));

      設定方向變化;

 recyclerView.addItemDecoration(new DividerItemDecoration(this, 


LinearLayoutManager.VERTICAL));

設定分割線;

   recyclerView.smoothScrollToPosition(3);可以滾動到可以的位置;


2接下來一步一步解析佈局

HeaderView實現RelativeLayout

init裡面設定狀態,可以改變view的可見不可見。並且是一個抽象方法去。

讓子類view的實現,他的佈局,上拉重新整理,下拉載入。各種狀態去實現,應該


可以去新增一些佈局動畫效果


3看看介面卡;


  @Override

    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup 


parent, int viewType) {

        if(viewType==HeaderType){

            HeaderFooterViewHolder headerFooterViewHolder=new 


HeaderFooterViewHolder(headerView);

            return  headerFooterViewHolder;

        }else if(viewType == FooterType) {

            HeaderFooterViewHolder headerFooterViewHolde=new 


HeaderFooterViewHolder(footerView);

            return headerFooterViewHolde;

        }else  {

            View contentView= LayoutInflater.from(parent.getContext


()).inflate(R.layout.content_view_for_test,parent,false);

            LinearLayout menuView = (LinearLayout) 


LayoutInflater.from(parent.getContext()).inflate


(R.layout.menu_for_test, parent, false);

            SwipeMenuLayout swipeMenuLayout = new SwipeMenuLayout


(parent.getContext(),contentView,menuView);

            return new ViewHolder(swipeMenuLayout);

        }


    }


    @Override

    public void onBindViewHolder(RecyclerView.ViewHolder holder, int 


position) {

}


4接下來是recyclerView的變化;


1第一介面:   public interface OnPullListener {

       

        void onRefresh();


       

        void onLoadMore();

    }

觸發監聽條件:

    @Override

    public void onScrolled(int dx, int dy) {

 if(!canScrollVertically(1))

載入更多;

}


onInterceptTouchEvent:

攔截垂直滑動的狀況。攔截下來進行處理。攔截下來後。進行上拉重新整理,和下


拉刪除的操作;並且可以透過   int 


touchingPosition=getChildAdapterPosition(findChildViewUnder


(startX,startY));獲取到當前的情況,

 DragSwipeAdapter.ViewHolder viewHolder = 


(DragSwipeAdapter.ViewHolder) findViewHolderForAdapterPosition


(touchingPosition);

                    獲取到holder。然後根據postion獲取相應的佈局


item的佈局:這個佈局主要控制左滑,和右滑動的情況,並且用到sroller來使


滑動更加平滑;


另外,是透過

 private ValueAnimator.AnimatorUpdateListener 


scrollBackAnimatUpdateListener = new 


ValueAnimator.AnimatorUpdateListener() {

        @Override

        public void onAnimationUpdate(ValueAnimator valueAnimator) {

            float value = (float) valueAnimator.getAnimatedValue();

            adapter.getHeaderView().setViewHeight(currHeaderHeight * 


value);

            if(value==0){

                refreshing = false;

            }

        }

    };

根據時間控制動畫;


在MainActivity中,控制非同步請求;

  private class GetDataTask extends AsyncTask{

        @Override

        protected void onPostExecute(String[] strings) {

            recyclerView.onRefreshComplete();

            super.onPostExecute(strings);

        }


        @Override

        protected String[] doInBackground(Void... voids) {

            try {

                Thread.sleep(1400);

            } catch (InterruptedException e) {

                e.printStackTrace();

            }

            return null;

        }

    };

原文連結:http://www.apkbus.com/blog-880881-68498.html

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2041/viewspace-2813989/,如需轉載,請註明出處,否則將追究法律責任。

相關文章