Android:Banner 和 Glide 在 Fragment 中实现轮播图
添加依赖信息
引入 Banner 和 Glide 依赖信息:
dependencies {
implementation 'io.github.youth5201314:banner:2.2.2'
implementation 'com.github.bumptech.glide:glide:4.14.2'
annotationProcessor 'com.github.bumptech.glide:compiler:4.14.2'
}
Banner 视图
<?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"
android:background="#EAEAEA"
android:padding="5dp">
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginStart="5dp"
android:layout_marginTop="5dp"
android:layout_marginEnd="5dp"
android:layout_marginBottom="5dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="SpeakableTextPresentCheck">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.youth.banner.Banner
android:id="@+id/banner"
android:layout_width="match_parent"
android:layout_height="150dp"
app:banner_radius="8dp" />
</RelativeLayout>
</ScrollView>
</androidx.constraintlayout.widget.ConstraintLayout>
图片实体类
Kotlin:
class BannerViewItem() {
var url: String = ""
constructor(url: String) : this() {
this.url = url
}
override fun toString(): String {
return "BannerViewItem(url='$url')"
}
}
Java:
public class BannerViewItem {
private String url;
public BannerViewItem(String url) {
this.url = url;
}
public BannerViewItem() {}
public getUrl() {
return this.url
}
public setUrl(String url) {
this.url = url;
}
}
轮播图适配器
创建一个类,继承 BannerAdapter,类中再创建一个 Holder 内部类。实现 BannerAdapter 的两个函数:onCreateHolder、onBindView。
Kotlin:
class BannerViewApapter(
banners: List<BannerViewItem>,
private var fragment: Fragment
) : BannerAdapter<BannerViewItem, BannerViewApapter.BannerViewHolder>(banners) {
override fun onCreateHolder(parent: ViewGroup?, viewType: Int): BannerViewHolder {
val imageView = ImageView(parent!!.context)
imageView.layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)
imageView.scaleType = ImageView.ScaleType.CENTER_CROP
return BannerViewHolder(imageView)
}
override fun onBindView(holder: BannerViewHolder?, data: BannerViewItem?, position: Int, size: Int) {
Glide.with(fragment).load(mDatas[position].url).into(holder!!.imageView)
}
class BannerViewHolder(var imageView: ImageView) : RecyclerView.ViewHolder(imageView) {
init {
imageView.scaleType = ImageView.ScaleType.CENTER_CROP
}
}
}
Java:
public class BannerViewApapter {
private List<BannerViewItem> banners;
private Fragment fragment;
public BannerViewApapter(List<BannerViewItem> banners, Fragment fragment) {
super(banners);
this.fragment = fragment;
}
@Override
public BannerViewHolder onCreateHolder(ViewGroup parent, int viewType) {
ImageView imageView = new ImageView(parent.getContext());
imageView.setLayoutParams(new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
return new BannerViewHolder(imageView);
}
@Override
public void onBindView(BannerViewHolder holder, BannerViewItem data, int position, int size) {
Glide.with(fragment).load(mDatas.get(position).getUrl()).into(holder.imageView);
}
private class BannerViewHolder extends RecyclerView.ViewHolder {
ImageView imageView;
public BannerViewHolder(@NonNull ImageView view) {
super(view);
this.imageView = view;
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
}
}
}
Fragment 中使用
通过 id 找到布局文件中的 Banner 视图,给其设置 Adapter。
Kotlin:
class HomeFragment : Fragment() {
private lateinit var binding: FragmentHomeBinding
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
binding = FragmentNavFindBinding.inflate(layoutInflater, container, false)
binding.banner.addBannerLifecycleObserver(this).setAdapter(
BannerViewApapter(
listOf(
BannerViewItem("https://cdn.cnbj1.fds.api.mi-img.com/mi-mall/1f28377c4236841c7294ae68c88e5af6.jpg?w=2452&h=920"),
BannerViewItem("https://cdn.cnbj1.fds.api.mi-img.com/mi-mall/e89200db5385ff3d99fb45cc342fcd14.jpg?thumb=1&w=1533&h=575&f=webp&q=90")
), this
)
).indicator = CircleIndicator(context);
return binding.root
}
}
Java:
public class HomeFragment extends Fragment {
private final ArrayList<BannerViewItem> banners;
public HomeFragment() {
banners = new ArrayList<>();
banners.add(new BannerViewItem("https://cdn.cnbj1.fds.api.mi-img.com/mi-mall/1f28377c4236841c7294ae68c88e5af6.jpg?w=2452&h=920"));
banners.add(new BannerViewItem("https://cdn.cnbj1.fds.api.mi-img.com/mi-mall/e89200db5385ff3d99fb45cc342fcd14.jpg?thumb=1&w=1533&h=575&f=webp&q=90"));
banners.add(new BannerViewItem("https://cdn.cnbj1.fds.api.mi-img.com/mi-mall/34ee703098b12753b2130a3462ca33ac.jpg?thumb=1&w=1533&h=575&f=webp&q=90"));
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View inflate = inflater.inflate(R.layout.fragment_home, container, false);
Banner banner = inflate.findViewById(R.id.banner);
banner.addBannerLifecycleObserver(this)
.setAdapter(new BannerViewApapter(banners, this))
.setIndicator(new CircleIndicator(getContext()));
return inflate;
}
}
效果图
Android:Banner 和 Glide 在 Fragment 中实现轮播图的更多相关文章
- android中广告轮播图总结
功能点:无限轮播.指示点跟随.点击响应.实现思路: 1.指示点跟随,指示点通过代码动态添加,数量由图片数量决定. 在viewpager的页面改变监听中,设置点的状态选择器enable,当前页时,set ...
- angularjs中使用轮播图指令swiper
我们在angualrjs移动开发中遇到轮播图的功能 安装 swiper npm install --save swiper 或者 bower install --save swiper 引入文件 ...
- js轮播图和bootstrap中的轮播图
js中的轮播图案例: <!DOCTYPE html><html lang="en"> <head> <meta charset=" ...
- Android项目实战(四十七):轮播图效果Viewpager
简易.常用的轮播图效果ViewPager ,老技术了,记一笔留着以后ctrl C + ctrl V 需求如下: 不定张个数的ImagView轮播,右下角显示轮播点图标,每隔固定时间切换下一张,最 ...
- 利用axure软件实现app中的轮播图功能
1.首先在axure软件中插入一张手机模型图片并调整为合适大小 2.在需要展示轮播图片位置拖入[动态面板]并且调整大小 拖入后双击动态面板,填入面板名称,并且添加面板状态(此处轮播图为三张,所以有三个 ...
- React中使用CSSTransitionGroup插件实现轮播图
动画效果,是一个页面上必不可少的功能,学习一个新的东西,当然就要学习,如何用新的东西,用它的方法去实现以前的东西啦.今天呢,我就在这里介绍一个试用react-addons-css-transition ...
- 微信小程序之swiper轮播图中的图片自适应高度
小程序中的轮播图很简单,官方都有例子的,但是唯一的缺陷就是swiper是固定死的150px高度,这样如果传入的图片大于这个高度就会被隐藏.辣么,怎样让图片自适应不同分辨率捏. 我的思路是:获取屏幕宽度 ...
- Ionic4.x 中的 UI 组件(UI Components) Slides 轮播图组件、Searchbar 组件、 Segment 组件
Slides 轮播图组件 Ionic4.x 中的轮播图组件是基于 swiper 插件,所以配置 slides 的属性需要在 swiper 的 api 中 找 Swiper Api:http://ida ...
- Android 轮播图Banner切换图片的效果
Android XBanner使用详解 2018年03月14日 08:19:59 AND_Devil 阅读数:910 版权声明:本文为博主原创文章,未经博主允许不得转载. https://www. ...
- 029 Android 轮播图广告Banner开源框架使用
1.Banner介绍 现在的绝大数app都有banner界面,实现循环播放多个广告图片和手动滑动循环等功能. 2.使用环境配置(具体可见github开源项目) (1)添加依赖 在build.gradl ...
随机推荐
- Java中遇到的常见问题
一.常用的快捷键 查询对应类:Ctrl+N eclipse的快速生成代码:Alt+Shift+s或sources 加单行注释:Ctrl+/ 运行程序:Ctrl+Shift+F10 搜索:Ctrl+ ...
- MIT6.828学习笔记3(Lab3)
Lab 3: User Environments 在这个lab中我们需要创建一个用户环境(UNIX中的进程,它们的接口和实现不同),加载一个程序并运行,并使内核能够处理一些常用的中断请求. Part ...
- MYSQL-INNODB索引构成详解
作者:郑啟龙 摘要: 对于MYSQL的INNODB存储引擎的索引,大家是不陌生的,都能想到是 B+树结构,可以加速SQL查询.但对于B+树索引,它到底"长"得什么样子,它具体如何由 ...
- Vue快速上门(1)-基础知识图文版
VUE家族系列: Vue快速上门(1)-基础知识 Vue快速上门(2)-模板语法 Vue快速上门(3)-组件与复用 01.基本概念 1.1.先了解下MVVM VUE是基于MVVM思想实现的,那什么是M ...
- flask博客项目之tinymce图片上传
查看当前的博客发表情况 截图一张立马粘贴进来 点击发表,显示数据太长 不断撤退回到刚刚页面 删除大图,换成小图,上传方式 点击发表可以成功发表 数据库中查看,是把图片生成这种编码后字符串方式存储的了, ...
- 【Java面试指北】反射(1) 初识反射
如果你被问到:什么是反射?为什么需要反射.以及反射的应用?你会如何回答呢? 本篇会带大家初识反射,了解反射概念和基本应用.反射的原理以及深入源码的探究将会在后面几篇介绍. 一.什么是反射? 要理解什么 ...
- 一篇文章带你了解设计模式原理——UML图和软件设计原则
一篇文章带你了解设计模式原理--UML图和软件设计原则 我们在学习过程中可能并不会关心设计模式,但一旦牵扯到项目和面试,设计模式就成了我们的短板 这篇文章并不会讲到二十三种设计模式,但是会讲解设计模式 ...
- csp-j 游记
### 初赛 day -7 ~ day -1 赛前集训,都很简单,什么二叉树,图论呀,轻松搞定.做了 $2008$ 至 $2015$ 年的普及组真题,都在 $50$ 分以上,感觉初赛稳了(坐标 $HN ...
- Dubbo 3 之 Triple 流控反压原理解析
作者:顾欣 Triple 是 Dubbo 3 提出的基于 HTTP2 的开放协议, 旨在解决 Dubbo 2 私有协议带来的互通性问题. Triple 基于 HTTP/2 定制自己的流控,支持通过特定 ...
- 分享一般.net core的web项目发布到服务器环境的处理步骤(来自本人实践笔记)
<步骤1:发布> <步骤2:确保已打开iis web相关功能> [注]如果未打开在按如下操作. Win7/win10通过打开或关闭windows功能. Windows2012等 ...