真的真的想不到起什么标题好了,这次的内容真的是太简单了,没有什么挑战性,一天以内就完成了。最近在学kotlin,也会有一份kotlin的代码,鉴于很多人都是从java开始进行android开发的,kotlin的代码就不做一一详解,代码与java的版本放在了同一个压缩包里面

完成后的效果分别有:

用到的框架:

implementation 'com.github.bumptech.glide:glide:4.12.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0'implementation 'io.github.youth5201314:banner:2.2.2'

所需权限:

<uses-permission android:name="android.permission.INTERNET"/>

加载多张图片通用的xml文件(Banner效果除外)

<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=".LoadMultipleImagesActivity"><androidx.recyclerview.widget.RecyclerViewandroid:id="@+id/images"android:layout_width="match_parent"android:layout_height="match_parent"/></androidx.constraintlayout.widget.ConstraintLayout>

线性垂直(仿阅读漫画中的图片样式)

实现线性垂直的方式目前能想到的有两种,一是使用ListView,另一种是使用RecycleView。

ListView的优化没有RecycleView做的好,RecycleView可自定义的样式更加的丰富、更加的美观,性能优化较ListView好许多,这里也只讲RecycleView的实现方式。

为RecycleView设置LayoutManager与Adapter:

// inflate.images是一个RecycleView控件
inflate.images.setLayoutManager(new LinearLayoutManager(this));
// ImagesAdapter自定义继承自RecyclerView.Adapter的一个类
inflate.images.setAdapter(new ImagesAdapter(this,DataUtils.getInstance().getList());

自定义xml样式:

<ImageView android:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/itemImage"xmlns:android="http://schemas.android.com/apk/res/android" />

onCreateViewHolder绑定一个自定义好的布局,在onBindViewHolder输入一行代码即可完成

Glide.with(context).asBitmap().load(list.get(position)).into(holder.imageView);

实现效果:

有人可能会觉得这个压根不是漫画APP的效果,可能会觉得人家的APP阅读漫画的图片样式用的都是加载长图的,如果你这样想,你就错了,你中了人家的障眼法了,先看人家效果图:

这样滑下去看,图片是一连串的,没错吧?

其实它也可以由多图组成,不一定非得长图、大图,连续多张图片也是可以在组成这种效果,如下图,只要让一张图片底部的颜色与下一张图片顶部颜色都是同一种颜色,就可以实现所谓的“无缝衔接”。

线性垂直(仿漫画列表介绍样式)

线性垂直样式,也可使用ListView实现,但效果相对RecycleView来说有点差距,我们还是继续用RecycleView来实现。

实现的方式和线性垂直(仿阅读漫画中的图片样式)基本一致

为RecycleView设置LayoutManager与Adapter:

inflate.images.setLayoutManager(new LinearLayoutManager(this));
inflate.images.setAdapter(new ImagesAdapter(this,DataUtils.getInstance().getListBean());

自定义xml样式:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"xmlns:app="http://schemas.android.com/apk/res-auto"><ImageViewandroid:id="@+id/itemImage"android:layout_width="100dp"android:layout_height="150dp"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintTop_toTopOf="parent"app:layout_constraintBottom_toBottomOf="parent"android:layout_margin="12dp"/><TextViewandroid:id="@+id/name"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_margin="12dp"android:textColor="@color/black"android:textSize="16sp"app:layout_constraintTop_toTopOf="parent"app:layout_constraintLeft_toRightOf="@+id/itemImage"/><TextViewandroid:id="@+id/introduction"android:layout_width="0dp"android:layout_height="0dp"android:layout_margin="12dp"android:textSize="14sp"app:layout_constraintLeft_toRightOf="@+id/itemImage"app:layout_constraintTop_toBottomOf="@+id/name"app:layout_constraintRight_toRightOf="parent"app:layout_constraintBottom_toBottomOf="parent"/></androidx.constraintlayout.widget.ConstraintLayout>

在ImagesAdapter的onCreateViewHolder绑定自定义xml布局后,将它展示出来

// RequestOptions.bitmapTransform(new RoundedCorners(10)):设置图片圆角样式
Glide.with(context).asBitmap().load(dataBeans.get(position).uri).apply(RequestOptions.bitmapTransform(new RoundedCorners(10))).into(holder.imageView);
holder.name.setText(dataBeans.get(position).name);
holder.introduction.setText(dataBeans.get(position).introduction);

实现效果:

线性水平(可往左拉的漫画列表)

前面两个线性垂直,可以使用ListView与RecycleView进行布局,但水平方向滑动的效果ListView就无法实现了,也只能用RecycleView。

为RecycleView设置LayoutManager与Adapter:

LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
// 设置方向
linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
inflate.images.setLayoutManager(linearLayoutManager);
inflate.images.setAdapter(new ImagesAdapter(this,DataUtils.getInstance().getListBean()));

LinearLayoutManager默认的方向是VERTICAL(垂直),需要用setOrientation方法修改它的方向。

自定义xml样式:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:layout_width="100dp"android:layout_height="wrap_content"android:orientation="vertical"android:id="@+id/ll"android:layout_marginTop="8dp"android:layout_marginRight="8dp"xmlns:android="http://schemas.android.com/apk/res/android" ><ImageView android:layout_width="match_parent"android:layout_height="150dp"android:id="@+id/itemImage"xmlns:android="http://schemas.android.com/apk/res/android" /><TextViewandroid:id="@+id/name"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:textColor="@color/black"android:paddingTop="3dp"/></LinearLayout>

onCreateViewHolder绑定自定义的布局,在onBindViewHolder输入两行代码即可完成

Glide.with(context).asBitmap().load(dataBeans.get(position).uri).apply(RequestOptions.bitmapTransform(new RoundedCorners(10))).into(holder.imageView);
holder.name.setText(dataBeans.get(position).name);

实现效果:

网格(仿个人书架、收藏)

网格样式,与上面三种的最主要的区别便是setLayoutManager的Manager不同,网格用的是网格样式专用的GridLayoutManager,该方法需要传的参数是Context与一行的个数占比。

为RecycleView设置LayoutManager与Adapter:

inflate.images.setLayoutManager(new GridLayoutManager(this,3));
inflate.images.setAdapter(new ImagesAdapter(this,DataUtils.getInstance().getListBean()));

自定义xml样式:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:layout_width="100dp"android:layout_height="wrap_content"android:orientation="vertical"android:id="@+id/ll"android:layout_marginTop="8dp"xmlns:android="http://schemas.android.com/apk/res/android" ><ImageView android:layout_width="match_parent"android:layout_height="150dp"android:id="@+id/itemImage"/><TextViewandroid:id="@+id/name"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:textColor="@color/black"android:paddingTop="3dp"/></LinearLayout>

在ImagesAdapter的onCreateViewHolder绑定自定义xml布局后,将它展示出来

Glide.with(context).asBitmap().load(dataBeans.get(position).uri).apply(RequestOptions.bitmapTransform(new RoundedCorners(10))).into(holder.imageView);
holder.name.setText(dataBeans.get(position).name);

实现效果:

GridLayoutManagerLinearLayoutManager一样,也可以设置水平方向或垂直方向,默认方向同样是VERTICAL(垂直)

inflate.images.setLayoutManager(new GridLayoutManager(this,4,GridLayoutManager.HORIZONTAL,false));

水平方向效果(设置paddingmargin后效果会好点):

瀑布流(仿个人书架、收藏、商城)

瀑布流样式,失效的效果目前在商城看见的较多,但是也不妨碍漫画APP引入瀑布流。

为RecycleView设置LayoutManager与Adapter:

inflate.images.setLayoutManager(new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL));
inflate.images.setAdapter(new ImagesAdapter(this,DataUtils.getInstance().getListBean(),3));

xml代码与网格的xml一样,不重复贴。

在ImagesAdapter的onCreateViewHolder绑定自定义xml布局后,将它展示出来,需要注意的一点就是瀑布流的效果不是说你用setLayoutManager设置了StaggeredGridLayoutManager效果就是瀑布流,瀑布流的样式是需要修改item的高度,高度不同,才能展现其效果。

if (position % 2 == 0) {ViewGroup.LayoutParams layoutParams = holder.imageView.getLayoutParams();layoutParams.height = 400;holder.imageView.setLayoutParams(layoutParams);
}
Glide.with(context).asBitmap().load(dataBeans.get(position).uri).apply(RequestOptions.bitmapTransform(new RoundedCorners(10))).into(holder.imageView);
holder.name.setText(dataBeans.get(position).name);

实现效果:

Banner(仿阅读漫画自动切换)

Banner效果的实现,靠的是人家的框架,xml的文件自然也和以上几种不一样。

xml布局:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".LoadBannerActivity"><com.youth.banner.Bannerxmlns:app="http://schemas.android.com/apk/res-auto"android:id="@+id/banner"android:layout_width="match_parent"android:layout_height="500dp"tools:ignore="MissingConstraints"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toTopOf="parent"/></androidx.constraintlayout.widget.ConstraintLayout>

代码逻辑并不复杂,同样是使用setAdapter设置一个适配器

inflate.banner.setAdapter(new ImageAdapter(DataUtils.getInstance().getListBean()));

ImageAdapter与上面的Adapter并不是同一个,这个Adapter继承自BannerAdapter

class ImageAdapter extends BannerAdapter<DataBean, ImageAdapter.BannerViewHolder> {public ImageAdapter(List<DataBean> mDatas) {//设置数据,也可以调用banner提供的方法,或者自己在adapter中实现super(mDatas);}//创建ViewHolder,可以用viewType这个字段来区分不同的ViewHolder@Overridepublic BannerViewHolder onCreateHolder(ViewGroup parent, int viewType) {ImageView imageView = new ImageView(parent.getContext());//注意,必须设置为match_parent,这个是viewpager2强制要求的ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT);imageView.setLayoutParams(layoutParams);imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);return new BannerViewHolder(imageView);}@Overridepublic void onBindView(BannerViewHolder holder, DataBean data, int position, int size) {Glide.with(LoadBannerActivity.this).asBitmap().load(data.uri).apply(RequestOptions.bitmapTransform(new RoundedCorners(10))).into(holder.imageView);}class BannerViewHolder extends RecyclerView.ViewHolder {ImageView imageView;public BannerViewHolder(@NonNull ImageView view) {super(view);this.imageView = view;}}
}

实现效果:

默认切换图片的时间是两秒左右,可设置指定时间切换下一张图片需要添加setDelayTimesetLoopTime方法,具体是哪一个方法请根据自己所导入的版本新旧选择。

代码链接:RecycleView简单仿漫画APP图片相关样式

注意:
1、本文的控件使用了ViewBinding,没掌握这一知识点的同学可以先了解一下这一知识点,当你会用的时候你会发现:原来绑定控件可以这么简单。
2、本文图片来自网络,如有侵权请联系删除。

【Android】RecycleView简单仿漫画APP图片相关样式相关推荐

  1. Android 最简单仿IOS菊花加载样式,自定义Loading加载View

    自定义菊花旋转加载view,可自定义半径大小,旋转view个数.颜色等,具体代码如下,可直接使用 public class LoadingView extends View {private Rect ...

  2. 简单Android手机APP地图,android最简单手机地图APP(只需5分钟)

    android最简单手机地图APP--只有三部分. 第一部分 首先建立一个MapActivity在setContentView(R.layout.activity_map);中创建一个代码如下. [h ...

  3. android采用MVP完整漫画APP、钉钉地图效果、功能完善的音乐播放器、仿QQ动态登录效果、触手app主页等源码...

    Android精选源码 一个可以上拉下滑的Ui效果,觉得好看可以学学 APP登陆页面适配 一款采用MVP的的完整漫画APP源码 android实现钉钉地图效果源码 一个使用单个文字生成壁纸图片的app ...

  4. android采用MVP完整漫画APP、钉钉地图效果、功能完善的音乐播放器、仿QQ动态登录效果、触手app主页等源码

    Android精选源码 一个可以上拉下滑的Ui效果,觉得好看可以学学 APP登陆页面适配 一款采用MVP的的完整漫画APP源码 android实现钉钉地图效果源码 一个使用单个文字生成壁纸图片的app ...

  5. Android仿微信发图片的样式,做IM的同学的病有救了

    一:前言 最近在搞IM,真的特别痛苦.脑袋大,对于我这种菜鸟来说太难了,比现在社会娶个媳妇还难,硬着头皮搞,终于文字,语音,表情搞完了,开始搞图片,看着微信发的图片跟文字,语音有点区别,因为它并没有外 ...

  6. Android——一个简单的音乐APP(二)

    一个简单的音乐APP 效果视频 前言 音乐下载 音乐下载效果图 实习步骤&思想 添加到下载队列 单任务下载 多任务下载 音乐下载 获取音乐下载源 创建本地路径 创建目录 开始音乐下载 下载进度 ...

  7. Android——一个简单的天气APP

    一个简单的天气APP 效果演示视频 简述 天气JSON数据 实况天气 逐24小时天气预报 未来七天天气预报 天气详情页 效果图 获取JSON数据 URL请求 实况天气URL 逐24小时天气预报URL ...

  8. Android破取某漫画app获得VIP权限

    0.前言 昨天去公司加班,写业务代码写的我是心烦意乱,今天本打算再继续写的,但是就像肉吃多了也腻一样,想搞点新花样试试,最近对写外挂和破解app很有兴趣,想到最近某漫画app里的某部漫画需要用vip权 ...

  9. Android——一个简单的闹钟APP

    一个简单的闹钟 效果视频 闹钟子项 子项布局效果图 闹钟适配器类 闹钟初始数据 侧滑删除闹钟子项 添加依赖 布局设置 实现侧滑回调方法 绑定RecyclerView 删除子项 新增闹钟子项 序列化实体 ...

最新文章

  1. Python小知识点(3)--装饰器
  2. 使用EntityFramework6连接MySql数据库(db first方式)
  3. Android中用Application类实现全局变量
  4. 深度学习(十八)基于R-CNN的物体检测-CVPR 2014-未完待续
  5. QT的QLocale类的使用
  6. 【spring boot】【POI】错误:The supplied data appears to be in the Office 2007+ XML
  7. 安装ORACLE RAC时,用到的一些小命令1.弹出CD,2:配置时间同步,3.查看磁盘信息UUID
  8. JSF Tomcat配置示例
  9. 周志华《Machine Learning》 学习笔记系列(1)--绪论
  10. Broadcast简单使用
  11. linux ftp脚本
  12. 红橙Darren视频笔记 App保活-双进程守护与JobService
  13. 1-算法-hanoi汉诺塔问题- 递归
  14. Yandex.Algorithm 2011 Round 2 D. Powerful array 莫队算法
  15. 20年未解的MIT密码难题,被自学成才的程序员破解了,比预计早15年
  16. CPU的内部架构和工作原理
  17. Qt之音频播放(二)
  18. 电脑安装系统时提示“找不到硬盘”如何解决
  19. 银行计算机岗位职称,银行职称有哪些,等级是如何划分的
  20. 直播活动策划方案怎么做

热门文章

  1. compiz的ubuntu10.04安装
  2. html背景图片动效,css3实现点击切换背景图片,并且背景图片实现动画效果
  3. CMAP是否可以使用RemoveAll()释放内存?CMAP如何释放内存?
  4. win7网络发现启用后找不到网络计算机,win7启用网络发现怎么又关闭了怎么解决...
  5. transformer--ViT
  6. 三维激光扫描系统基本原理及分类
  7. Kotlin学习路(七):高阶函数与内联函数关系
  8. mysql 查询分析器_mysql查询分析工具|mysql查询分析器(MySQL Query Browser)下载v1.1.20 官方版_ IT猫扑网...
  9. 用 shader effect 实现雨滴落水效果!Cocos Creator 3D !
  10. (详解)钉钉接口,PC端微应用,免登录及获取当前用户信息