RecycleView实现瀑布流

现在列表的布局较少用ListView,而大多数采用的是RecycleView,RecycleView可以有较多的变换,非常的灵活,也可以自定义设计你想要的动画或者是分割线,所以比较受欢迎吧。

RecycleView使用

1.Bind RecycleView

使用了butterknife来绑定,稍稍可以偷懒一点

@Bind(R.id.id_recycle)
RecyclerView recyclerView;
2.设置布局管理器

 recyclerView.setLayoutManager(new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL));
这里设置的是实现流式布局,设置的2列,方向是垂直的,实现瀑布流就是用流式布局

3.设置adapter

 recyclerView.setAdapter(photoAdapter);
4.设置分割线和动画

recyclerView.addItemDecoration( new DividerGridItemDecoration(this ));  
recyclerView.setItemAnimator( new DefaultItemAnimator());  

其中主要难点在于adapter

自定义的adapter要继承RecycleView.Adapter,在adapter中要使ViewHolder继承自RecycleView.ViewHolder

在此之前定义了PhotoEntity实体类,里面有photo的各种信息(这个不重要),并且定义了一个photo.xml,这个是每个图片的布局,有imageView和textView

RecycleView.Adapter有三个方法:

onCreateViewHolder() : 这个类似于getView,返回的是ViewHolder,用来加载视图

onBindViewHolder() : 将数据等添加到ViewHolder

getItemCount() :获得列表的数量


public class PhotoAdapter extends RecyclerView.Adapter<PhotoAdapter.ViewHolder> {


    List<PhotoEntity> mList;    //图片列表
    Fragment mFragment; //图片点击加载的fragment


    public  PhotoAdapter(List<PhotoEntity> mList,Fragment fragment){
        this.mList = mList;
        this.mFragment = fragment;
    }
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {  //相当于getView,返回加载的视图
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.photo,parent);
        ViewHolder viewHolder = new ViewHolder(v);
        return viewHolder;
    }


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


        //加载picasso
        PhotoEntity photo = mList.get(position);
        Picasso
                .with(mFragment.getContext())
                .load(Uri.parse(photo.getUrl()))
                .centerCrop()
                .into(holder.iv_photo);
        String desc = photo.getDesc();
        holder.tv_photo.setText(desc);
    }


    @Override
    public int getItemCount(){
        return mList.size();
    }


    public class ViewHolder extends RecyclerView.ViewHolder {
        @Bind(R.id.iv_photo)
        ImageView iv_photo;
        @Bind(R.id.tv_photo)
        TextView tv_photo;


        public ViewHolder(View itemView) {
            super(itemView);
            ButterKnife.bind(this,itemView);
        }
    }
}


在activity中把adapter与RecycleView绑定起来

photoAdapter = new PhotoAdapter(photo,this);
recyclerView.setAdapter(photoAdapter);
//实现瀑布流,两列
recyclerView.setLayoutManager(new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL));
recyclerView.setItemAnimator(new DefaultItemAnimator());

这就实现了瀑布流的布局。我们可以通过SwipeRefreshLayout实现下拉刷新
过程如下:

1.Bind SwipeRefreshLayout

@Bind(R.id.swipe_refresh_layout)
SwipeRefreshLayout swipeRefreshLayout;

2.设置下拉刷新的颜色

 swipeRefreshLayout.setColorSchemeResources(R.color.refresh_process1, R.color.refresh_process2, R.color.refresh_process3);

3.加载,mIsFirstCreate开始设置为true,为第一次创建,自然先要加载

</pre><pre name="code" class="plain">swipeRefreshLayout.measure(View.MEASURED_SIZE_MASK, View.MEASURED_HEIGHT_STATE_SHIFT);
        if (mIsFirstCreated){
            onRefresh();
        }


4.执行刷新,loadMore是刷新的执行体

public void onRefresh() {
        swipeRefreshLayout.setRefreshing(true);
        mPresenter.loadMore(page);
        mIsFirstCreated = false;
    }

5.停止刷新

 public void finishRefresh() {
        swipeRefreshLayout.setRefreshing(false);
    }



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值