Android RecyclerView+CardView 实现瀑布流并保存瀑布流状态
16lz
2021-01-23
步骤分解
第一步:导入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 Listlist = 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); } }}
更多相关文章
- android 应用 Ant脚本自动编译、打包、代码混淆、签名、安装等
- Android中处理代码未捕获异常
- Android后台保活,这里有你需要的所有姿势。2019,基于API26 Android
- Android时间互换代码
- 【Android Demo】获取指定网页的页面源代码
- Android开源项目:捕鱼达人游戏源代码
- 利用productFlavors实现一套代码打包多版本
- android sql 批量处理插入/修改/删除 操作通用代码
- Android功能代码