步骤分解
第一步:导入recyclerview与cardview的包
compile 'com.android.support:appcompat-v7:24.+' compile 'com.android.support.constraint:constraint-layout:1.0.2' compile'com.android.support:recyclerview-v7:24.2.0' compile'com.android.support:cardview-v7:24.2.0'
首先导入v7包然后导入recyclerview与cardview注意后面的版本与v7统一,加号的意思是不确定哪个版本
第二步: 在布局文件中引用recyclerview
<android.support.v7.widget.RecyclerView android:id="@+id/recycler" android:layout_width="match_parent" android:layout_height="match_parent"> </android.support.v7.widget.RecyclerView>
第三步: 在代码中操作
(1) 首先初始化recyclerview
(2) 初始化manager三种 1线性 list 2 格子grid 3瀑布流
(3) 自定义adapter自定义viewholder
(4) 调用
第四步:上代码
package com.test.testcard; import android.app.Activity; import android.graphics.Rect; import android.graphics.drawable.GradientDrawable; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.StaggeredGridLayoutManager; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Random; public class MainActivity extends Activity { private RecyclerView recyclerView; private StaggeredGridLayoutManager manager; private MyAdapter adapter; private List<String> list = new ArrayList<>(); private Map<String,Integer> map=new HashMap<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); for (int i = 0; i < 40; i++) { list.add(i + "pop"); } recyclerView = (RecyclerView) findViewById(R.id.recycler); manager = new StaggeredGridLayoutManager(4, StaggeredGridLayoutManager.VERTICAL); adapter = new MyAdapter(); manager.setGapStrategy(StaggeredGridLayoutManager.GAP_HANDLING_NONE); recyclerView.setLayoutManager(manager); recyclerView.addItemDecoration(new MyItemDection(20)); recyclerView.setAdapter(adapter); recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); manager.invalidateSpanAssignments(); } }); } /** * 自定义分割线 * */ public class MyItemDection extends RecyclerView.ItemDecoration { int space; public MyItemDection(int space) { this.space = space; } @Override public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { super.getItemOffsets(outRect, view, parent, state); outRect.top = space; outRect.bottom = space; outRect.left = space; outRect.right = space; } } /** * 自定义 适配器 * 这里的MyViewHolder是你自己定义的 */ public class MyAdapter extends RecyclerView.Adapter<MyViewHolder> { @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = getLayoutInflater().inflate(R.layout.cardlayout, null); return new MyViewHolder(view); } @Override public void onBindViewHolder(MyViewHolder holder, int position) { ViewGroup.LayoutParams de = holder.textView.getLayoutParams(); int height=(int)( Math.random() * 500)+200; //随机产生宽高map是记住每个item的大小防止重新刷新 if (map.containsKey(position+"")){ //如果存在则 de.height = map.get(position+""); holder.textView.setLayoutParams(de); }else{ //如果不在 map.put(""+position,height); de.height = height; holder.textView.setLayoutParams(de); } holder.textView.setText(list.get(position)); } @Override public int getItemCount() { return list.size(); } } /** *防止多次查id */ public class MyViewHolder extends RecyclerView.ViewHolder { public TextView textView; public MyViewHolder(View itemView) { super(itemView); textView = itemView.findViewById(R.id.cad); } } }