瀑布流

RecyclerView一个可以代替ListView和GridView的控件,那么RecyclerView到底比他们好在哪里?

RecyclerView架构提供了一种插拔式的体验,所以实现了代码的高度解耦,使用起来也异常的灵活。

我们可以通过设置它的LayoutManager控制其显示的方式,通过ItemDecoration控制Item间的间隔,通过ItemAnimator控制Item的增删动画

RecyclerView.LayoutManager提供了三个实现类其中LinearLayoutManager 现行管理器,支持横向、纵向,GridLayoutManager 网格布局管理器,StaggeredGridLayoutManager 瀑布就式布局管理器

那么先从LinearLayoutManager看起

先在gradle中引用倚赖:compile ‘com.android.support:recyclerview-v7:23.4.0’

1:朱布局,放入reclyerview

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="study.bawei.com.recyclerview.activity.MainActivity">

   <android.support.v7.widget.RecyclerView
       android:id="@+id/rv"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       tools:layout_editor_absoluteY="8dp"
       tools:layout_editor_absoluteX="8dp"></android.support.v7.widget.RecyclerView>
</LinearLayout>

2:item的布局,放入图片

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <ImageView
        android:id="@+id/iv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout>

3:主activity,添加数据源,item适配器package study.bawei.com.recyclerview.activity;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager;

import java.util.ArrayList;

import study.bawei.com.recyclerview.R;
import study.bawei.com.recyclerview.adapter.MyAda;

public class MainActivity extends AppCompatActivity {

String str="http://img2.imgtn.bdimg.com/it/u=885222770,3335807376&fm=11&gp=0.jpg";
private RecyclerView rv;
private ArrayList<String> list;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    rv= (RecyclerView) findViewById(R.id.rv);

    list=new ArrayList<>();
    //view的数据源
    for (int i=0;i<10;i++){
        list.add(str);
    }

    //核心代码
    //声明瀑布流的布局方式,3列垂直
    StaggeredGridLayoutManager manager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
    //设置管理器
    rv.setLayoutManager(manager);
    //创建适配器
    MyAda ada = new MyAda(list, this);
    /*//设置添加,移除item的动画,DefaultItemAnimator为默认的
    rv.setItemAnimator(new DefaultItemAnimator());*/
    rv.setAdapter(ada);

}

}
4:item适配器

package study.bawei.com.recyclerview.adapter;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;

import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;

import java.util.ArrayList;
import java.util.Random;

import study.bawei.com.recyclerview.R;

/**
 * 1:类的用途
 * 2:@author 张倩
 * 3:@date 2017/9/3 18:50
 */

public class MyAda extends RecyclerView.Adapter{

    ArrayList<String> list;
    Context con;
    private View view;
    private ArrayList<Integer> heightList;//装产出的随机数

    public MyAda(ArrayList<String> list, Context con) {
        this.list = list;
        this.con = con;
        //随机数决定高度
        heightList=new ArrayList<>();
        for (int i = 0; i < list.size(); i++) {
            int height = new Random().nextInt(200) + 100;//[100,300)的随机数
               heightList.add(height);
        }

    }

    //方法
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        //找到item的布局
        view = LayoutInflater.from(con).inflate(R.layout.item, parent,false);
        //将item布局给寄存器
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        ViewHolder holder1 = new ViewHolder(view);
       /* holder1.tv.setText(list.get(position));
        ViewGroup.LayoutParams params = holder1.tv.getLayoutParams();
        params.height=heightList.get(position);
        holder1.tv.setLayoutParams(params);*/
        //图片框架
        DisplayImageOptions options = new DisplayImageOptions.Builder().showImageOnLoading(R.mipmap.q).build();
        ImageLoader.getInstance().displayImage(list.get(position),holder1.iv,options);
        由于需要实现瀑布流的效果,所以就需要动态的改变控件的高度了
        ViewGroup.LayoutParams params = holder1.iv.getLayoutParams();
        params.height=heightList.get(position);
        holder1.iv.setLayoutParams(params);

    }

    //数据源的count
    @Override
    public int getItemCount() {
        return list.size();
    }

    //寄存器
    public class ViewHolder extends RecyclerView.ViewHolder{
       // TextView tv;
        ImageView iv;
        public ViewHolder(View itemView) {
            super(itemView);
           // tv= (TextView) itemView.findViewById(R.id.tv);
            iv= (ImageView) itemView.findViewById(R.id.iv);
        }
    }



}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值