步骤分解

第一步:导入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:id="@+id/recycler"    android:layout_width="match_parent"    android:layout_height="match_parent">

第三步: 在代码中操作

(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 list = new ArrayList<>();    private Map,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 {        @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);        }    }}

更多相关文章

  1. android 应用 Ant脚本自动编译、打包、代码混淆、签名、安装等
  2. Android中处理代码未捕获异常
  3. Android后台保活,这里有你需要的所有姿势。2019,基于API26 Android
  4. Android时间互换代码
  5. 【Android Demo】获取指定网页的页面源代码
  6. Android开源项目:捕鱼达人游戏源代码
  7. 利用productFlavors实现一套代码打包多版本
  8. android sql 批量处理插入/修改/删除 操作通用代码
  9. Android功能代码

随机推荐

  1. Android将允许纯C/C++开发应用
  2. Android的一些基本概念
  3. Android主流三方库源码分析(五、深入理解R
  4. Android常用类库包介绍
  5. Android 内核剖析
  6. Android之Shape和state_enabled使用总结
  7. Android Push Notification实现信息推送
  8. textview中有很多行,我只让它显示三行,最后
  9. Android 电话博大流程源码分析
  10. 基于OpenCV和QT,建立Android图像处理程序