android zxing-3.3.3的用法_Android使用RecyclerView实现复杂的多布局效果
引言
RecyclerView不只能进行单页面布局,而且可以通过重写adapter中的getItemViewType方法来进行多种View布局,今天就来使用RecyclerView实现复杂的多布局效果。实现一个RecyclerView中嵌套两个RecyclerView的效果,第一个横向滚动的Recycler同时又是纵向RecyclerView的第一个ItemView。话不多说,搞定它!
效果预览
用法
第一步:布局文件(主)
<?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayout 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=".blog.Case34" tools:ignore="MissingConstraints"> <TextView android:id="@+id/title" android:layout_width="match_parent" android:layout_height="?android:attr/actionBarSize" android:background="@color/green" android:gravity="center" android:text="Recycler多布局(两个Recycler)" android:textColor="@color/white" android:textSize="20sp" /> <androidx.recyclerview.widget.RecyclerView android:id="@+id/recycler" android:layout_width="match_parent" android:layout_height="0dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintTop_toBottomOf="@id/title" />androidx.constraintlayout.widget.ConstraintLayout>
第二步:新建适配器类
/** * @data on 2020/9/27 9:21 AM * @auther armstrong * @describe Recycler多布局(2个Recycler)效果 */public class RecyclerView2TypeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private final int HOR_RECYCLER = 0; private final int VER_RECYCLER = 1; private List banannaList; private List mangguoList; private Context mContext; public RecyclerView2TypeAdapter(Context context, List fruitList1, List fruitList2) { this.mContext = context; this.banannaList = fruitList1; this.mangguoList = fruitList2; } @NonNull @Override public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view; if (viewType == HOR_RECYCLER) { view = LayoutInflater.from(parent.getContext()).inflate(R.layout.case34_hor_recycler, parent, false); return new HorViewHolder(view); } else { view = LayoutInflater.from(parent.getContext()).inflate(R.layout.case7_item_fruit, parent, false); return new VerViewHolder(view); } } @Override public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { if (holder instanceof HorViewHolder) { HorViewHolder horViewHolder = (HorViewHolder) holder; LinearLayoutManager layoutManager = new LinearLayoutManager(mContext); layoutManager.setOrientation(RecyclerView.HORIZONTAL); horViewHolder.horRecycler.setLayoutManager(layoutManager); horViewHolder.horRecycler.setAdapter(new FruitHorRecyclerVIewAdapter(banannaList)); } else if (holder instanceof VerViewHolder) { VerViewHolder verViewHolder = (VerViewHolder) holder; verViewHolder.fruitImage.setImageResource(mangguoList.get(position - 1).getImageId()); verViewHolder.fruitName.setText(mangguoList.get(position - 1).getName()); } } public static class HorViewHolder extends RecyclerView.ViewHolder { public RecyclerView horRecycler; public HorViewHolder(@NonNull View itemView) { super(itemView); horRecycler = itemView.findViewById(R.id.hor_recycler); } } public static class VerViewHolder extends RecyclerView.ViewHolder { public ImageView fruitImage; public TextView fruitName; public VerViewHolder(@NonNull View itemView) { super(itemView); fruitImage = itemView.findViewById(R.id.fruit_image); fruitName = itemView.findViewById(R.id.fruit_name); } } @Override public int getItemCount() { return mangguoList.size() + 1; } @Override public int getItemViewType(int position) { if (position == 0) { return HOR_RECYCLER; } else { return VER_RECYCLER; } }}
第三步:布局文件(子)
R.layout.case34_hor_recycler
<?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" tools:ignore="MissingConstraints"> <androidx.recyclerview.widget.RecyclerView android:id="@+id/hor_recycler" android:layout_width="match_parent" android:layout_height="wrap_content" />androidx.constraintlayout.widget.ConstraintLayout>
R.layout.case7_item_fruit
<?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/white" android:orientation="horizontal" android:padding="5dp" tools:ignore="MissingConstraints"> <ImageView android:id="@+id/fruit_image" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" tools:ignore="MissingConstraints" /> <TextView android:id="@+id/fruit_name" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_marginLeft="10dp" android:layout_weight="1" android:gravity="center" android:textColor="@color/black" android:textSize="20sp" tools:ignore="MissingConstraints" /> LinearLayout>androidx.constraintlayout.widget.ConstraintLayout>
第四步:在Activity中书写逻辑代码
public class Case34 extends AppCompatActivity { private LinearLayoutManager layoutManager; private List mList1; private List mList2; private RecyclerView recycler; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_case34); initView(); layoutManager = new LinearLayoutManager(this); layoutManager.setOrientation(RecyclerView.VERTICAL); recycler.setLayoutManager(layoutManager); recycler.setAdapter(new RecyclerView2TypeAdapter(this,mList1,mList2)); } private void initView() { recycler = findViewById(R.id.recycler); mList1 = new ArrayList(); for (int i = 1; i < 7; i++) { mList1.add(new Fruit("香蕉" + i, R.mipmap.banana)); //纵向 } mList2 = new ArrayList(); for (int i = 0; i < 21; i++) { mList2.add(new Fruit("芒果" + i, R.mipmap.mangguo)); //纵向 } }}
到这里就结束啦.往期精彩回顾:
Android实现短信验证码自动填充功能
Android仿echo精美弹幕功能
Android实现头像重叠排列功能
Android仿QQ个性标签功能
Android仿QQ侧滑删除的功能
android zxing-3.3.3的用法_Android使用RecyclerView实现复杂的多布局效果相关推荐
- android studio 如何提示方法的用法
方法/步骤1在 Eclipse中鼠标放上去就可以提示方法的用法,实际上Android Studio也可以设置的.如图 Preferences > Editor >Generan> S ...
- Android Service的onStartCommand返回值用法
2019独角兽企业重金招聘Python工程师标准>>> Android Service的onStartCommand返回值用法 本文目的:使读者快速理解 1.START_STICKY ...
- android另类工具,[置顶] android应用程序开发另解及Android SDK工具集的另类用法
转载请注明出处: LouisWang http://blog.csdn.net/louiswangbing/article/details/6606865 相信对于广大Android应用开发爱好者来说 ...
- Android之switch控件的用法
在做一个蓝牙开关时候,用到了switch,记一下用法,其实跟Button是几乎一样的. 布局中: <Switch android:id="@+id/open" android ...
- Android动画之AnimatorSet联合动画用法
动画入门和进阶文章列表: Animation动画概述和执行原理 Android动画之补间动画TweenAnimation Android动画之逐帧动画FrameAnimation Android动画之 ...
- Android zxing,轻松实现二维码扫描、生成
Android zxing,轻松实现二维码扫描.生成 一.二维码与条形码工作原理 目前的很多应用上都有扫码功能,当时微信推出二维码扫码功能时,觉得imagine,通过一张简单的图片就能扫描添加还有, ...
- android include 控件详解,Android开发中include控件用法分析
本文实例讲述了Android开发中include控件用法.分享给大家供大家参考,具体如下: 我们知道,基于Android系统的应用程序的开发,界面设计是非常重要的,它关系着用户体验的好坏.一个好的界面 ...
- android datepicker控件,android之datepicker控件的用法
如下所示: android:orientation="vertical" android:layout_width="wrap_content" android ...
- Android数据存储几种方式用法总结
Android数据存储几种方式用法总结 1.概述 Android提供了5种方式来让用户保存持久化应用程序数据.根据自己的需求来做选择,比如数据是否是应用程序私有的,是否能被其他程序访问,需要多少数据存 ...
最新文章
- canvas arcTo()用法详解 – CodePlayer
- Android之解析XML
- oracle数据库查表_oracle数据库常用的99条查询语句
- 深入理解分布式技术 - 配置中心
- C# 委托(Delegate)
- 浅谈ICA算法的概念、本质和流程
- C#连接Excel和Access(包括2003和2007版)方法总结
- 51单片机——定时器
- Codeforces Round #643 (Div. 2) E. Restorer Distance 题解(三分)
- 不是所有的努力都会有结果,但是你若不努力,谁能替你坚强??
- netty实战-自定义解码器处理半包消息
- 我是如何将Pluto作为library分享到jCenter
- 微信集成监控Job状态的功能
- MVC和MVVM的区别
- 如何给表添加新的字段
- 花一万个小时练习 Coding,不要浪费一万小时无谓地 Debugging
- 创建一个简易的虚拟桌面
- 定义函数 求sinh(x)的值。
- 互联网黑市分析之二:安卓地下渠道
- Android电量监控
热门文章
- 《代码大全》程序员们怎样花费自己的时间
- sudo修改文件夹名字_【转载】MAC系统修改帐号短名和个人文件夹名称
- python中的is_python中的is
- numpy基础笔记01
- SpringBoot yml 配置
- synchronized的用法介绍
- visual c语言编译运行结果,Visual Studio 2015编译运行C语言文件问题小结
- 华为大数据中心山西_任正非:华为愿与山西一道建立“煤矿人工智能创新实验室”...
- ARCore-Unity3d教程2 - 基本概念
- node mysql查询回调_nodejs 数据库查询回调问题