为了账号安全,请及时绑定邮箱和手机立即绑定

recyclerView的侧拉效果。上拉加载。下拉刷新,点击事件等等

标签:
Android

5b95f78a0001152302770399.jpg

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<Void,Void,String []>{

        @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

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消