Banner 实现图片轮播

  • 简介
  • 导入
  • 自定义样式
  • 快捷使用
  • 总结
Blog如有不对,敬请斧正
喜欢Android的可以关注我,日常更新Android干货
看都看到这了,加个关注叭!

简介

Banner能实现循环播放多个广告图片和手动滑动循环等功能,Banner框架可以进行不同样式、不同动画设置,以及完善的api方法能满足大部分软件首页轮播图效果的需求。

如:

QQ音乐:

网易云:

导入

//2.1.0以前jcenter的依赖
//implementation ‘com.youth.banner:banner:2.1.0’
//现在Maven Central
implementation ‘io.github.youth5201314:banner:2.2.2’’

自定义样式

主要是为Banner组件,添加适配器,继承自 BannerAdapter,BannerAdapter又适配器继承自RecyclerView.Adapter,故用法和RecyclerView.Adapter一样
如果RecyclerView还了解的可以看我以前的博客
地址:https://blog.csdn.net/weixin_44758662/article/details/108942044
步骤1:
在XML加入Banner组件

activity_mian.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:app="http://schemas.android.com/apk/res-auto"xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#372E2C2C"><com.youth.banner.Bannerandroid:id="@+id/banner"android:layout_width="match_parent"android:layout_height="110dp"app:banner_radius="15dp"android:layout_marginTop="15dp"android:layout_marginRight="10dp"android:layout_marginLeft="10dp"app:banner_loop_time="2000"/>
</LinearLayout>

要实现的轮播样式XML,我只放了一个ImageView
banner用到的是ViewPage2,ViewPage2规定要layout_width和layout_height要match_parent,所以使用需要注意,不然会抛出错误

mybannerrecycler.xml:

<?xml version="1.0" encoding="utf-8"?>
<ImageView xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/img_banner"android:layout_width="match_parent"android:layout_height="match_parent"android:scaleType="fitXY"/>

步骤2:
创建保存轮播样式XML数据的get、set方法,我只有一个ImageView,,故我的只有一个int变量因为 通过R.drawable.xxx获取到的资源文件可以保存为int

infoBean.java

package com.example.CSDN;
public class infoBean {private int picture;infoBean(int picture){this.picture = picture;}public int getPicture() {return picture;}public void setPicture(int picture) {this.picture = picture;}
}

步骤3、创建Banner的适配器
mbanneradapter.java

package com.example.CSDN;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.youth.banner.adapter.BannerAdapter;
import java.util.List;public class mbanneradapter extends BannerAdapter<infoBean,mbanneradapter.mbannerholder> {Context context;/*** 自定义构造方法* @param context  上下文对象* @param datas    传入数据*/public mbanneradapter(Context context,List<infoBean> datas) {super(datas);this.context = context;}@Overridepublic mbannerholder onCreateHolder(ViewGroup parent, int viewType) {return new mbannerholder(LayoutInflater.from(context).inflate(R.layout.mybannerrecycler, parent, false));}@Overridepublic void onBindView(mbannerholder holder, infoBean data, int position, int size) {holder.imageView.setImageResource(data.getPicture());
//设置监听
holder.itemView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Toast.makeText(context,"第"+(position+1)+"张",Toast.LENGTH_SHORT).show();}
});}public class mbannerholder extends RecyclerView.ViewHolder {ImageView imageView;public mbannerholder(@NonNull View itemView) {super(itemView);imageView = itemView.findViewById(R.id.img_banner);}}
}

步骤4:
在主页面设置banner

package com.example.CSDN;
import android.app.Activity;
import android.os.Bundle;
import com.youth.banner.Banner;
import com.youth.banner.indicator.CircleIndicator;
import java.util.ArrayList;
import java.util.List;public class homeActivity extends Activity {private Banner mbanner;List<infoBean> data = new ArrayList<>();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_mian);initDate();mbanner = findViewById(R.id.banner);//设置mbanner设配器
mbanner.setAdapter(new mbanneradapter(homeActivity.this,data));
//是否允许自动轮播
mbanner.isAutoLoop(true);
//设置指示器, CircleIndicator为已经定义好的类,直接用就好
mbanner.setIndicator(new CircleIndicator(this));
//开始轮播
mbanner.start();}/*** 设置数据,可以通过其他方法,这里快捷演示而已*/private void initDate() {data.add(new infoBean(R.drawable.a));data.add(new infoBean(R.drawable.b));data.add(new infoBean(R.drawable.c));data.add(new infoBean(R.drawable.d));data.add(new infoBean(R.drawable.e));}/*** 重写onStop、onDestroy、onStart方法控制banner生命周期,体验更好*/@Overrideprotected void onStop() {super.onStop();mbanner.stop();}@Overrideprotected void onDestroy() {super.onDestroy();mbanner.destroy();}@Overrideprotected void onStart() {super.onStart();mbanner.start();}
}

实现效果:

快捷使用

按照上面的方法,实属有点麻烦,而又只想实现一个图片的轮播效果而已,
那也好办,该框架已经做好了适配器,BannerImageAdapter我们直接用就好了

这样只用一个banner组件和一个添加图片数据的 List<Integer> list = new ArrayList()就好比自定义的方便多了

package com.example.CSDN;
import android.app.Activity;
import android.os.Bundle;
import com.youth.banner.Banner;
import com.youth.banner.adapter.BannerImageAdapter;
import com.youth.banner.holder.BannerImageHolder;
import com.youth.banner.indicator.CircleIndicator;
import java.util.ArrayList;
import java.util.List;public class homeActivity extends Activity {private Banner mbanner;List<Integer> list = new ArrayList();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_mian);initDate();mbanner = findViewById(R.id.banner);//设置mbanner设配器Banner banner = mbanner.setAdapter(new BannerImageAdapter<Integer>(list) {@Overridepublic void onBindView(BannerImageHolder holder, Integer data, int position, int size) {holder.imageView.setImageResource(data);}});
//是否允许自动轮播
mbanner.isAutoLoop(true);
//设置指示器
mbanner.setIndicator(new CircleIndicator(this));
//开始轮播
mbanner.start();}/*** 设置数据,可以通过其他方法,这里快捷演示而已*/private void initDate() {list.add(R.drawable.a);list.add(R.drawable.b);list.add(R.drawable.c);list.add(R.drawable.d);list.add(R.drawable.e);}/*** 重写onStop、onDestroy、onStart方法控制banner生命周期,体验更好*/@Overrideprotected void onStop() {super.onStop();mbanner.stop();}@Overrideprotected void onDestroy() {super.onDestroy();mbanner.destroy();}@Overrideprotected void onStart() {super.onStart();mbanner.start();}
}

总结

下面是banner常用的方法和属性。
常用方法:

方法 详细
setAdapter(T extends BannerAdapter) 设置banner的适配器
getIndicator() 获取你设置的指示器
setIndicator(Indicator) 设置banner轮播指示器
getIndicator() 获取你设置的指示器
setIndicatorSelectedColor(@ColorInt) 设置指示器选中颜色
setIndicatorSpace(int) 设置指示器之间的间距
setBannerGalleryEffect(int,int,float) 画廊效果

XML中banner常用的属性

属性 详细
banner_loop_time 轮播间隔时间,默认3000
banner_radius banner圆角半径
banner_orientation 轮播方向:horizontal(默认) or vertical
banner_auto_loop 是否自动轮播,默认true

Banner框架实现图片轮播相关推荐

  1. java实现轮播图片_Banner框架实现图片轮播

    Banner 实现图片轮播 简介 导入 自定义样式 快捷使用 总结 Blog如有不对,敬请斧正 喜欢Android的可以关注我,日常更新Android干货 看都看到这了,加个关注叭! 简介 Banne ...

  2. DEDECMS后台上传banner图控制图片轮播

    将图片轮播做到后台控制,无论是dedecms还是其他的程序都是一样的重要,方便客户自己调试,不然动不动就拿FTP开刷,一个是操作不方便,增加了使用上的难度,另外也有一定的风险,很可能由于操作生疏,误操 ...

  3. Android 加载圆角的图片轮播图

    图片轮播图相信大家有不会陌生,主要用于展示广告.本篇文章是基于第三方Banner框架实现图片轮播.大家可以去看看我之前的文章:Android 广告轮播图(最简单的实现),看看是怎么基础实现. 本篇文章 ...

  4. 响应式banner图片轮播布局代码

    响应式banner图片轮播布局代码 基于jQuery制作企业家具网站首页banner响应式图片轮播,支持带左右按钮控制图片淡出淡现切换效果.手机自适应屏幕大小.修改:添加json动态数据轮播图片. 演 ...

  5. 小博老师演示常用JQuery效果 ——图片轮播

    2019独角兽企业重金招聘Python工程师标准>>> [理论知识] 我们在实际开发应用程序的过程中,经常会遇到图片轮播的效果需求,本文小博老师就为大家演示一下,如何使用JQuery ...

  6. element 走马灯实现图片轮播

    <template>     <div id="banner">       <!--动态将图片轮播图的容器高度设置成与图片一致-->      ...

  7. html鼠标滚动图片渐渐淡出,原生js和jquery实现图片轮播淡入淡出效果

    图片轮播有很多种方式,这里采用其中的 淡入淡出形式 js原生和jQuery都可以实现,jquery因为封装了很多用法,所以用起来就简单许多,转换成js使用,其实也就是用js原生模拟出这些用法. 但不管 ...

  8. banner(图片轮播)框架的使用

    展示效果 1.Gridle文件添加: compile 'com.youth.banner:banner:1.4.9'  //最新版本 2.AndroidManifest.xml添加权限 <use ...

  9. android首页图片轮播效果,Android_Android自动播放Banner图片轮播效果,先看一下效果图支持本地图 - phpStudy...

    Android自动播放Banner图片轮播效果 先看一下效果图 支持本地图片以及网络图片or本地网络混合. 使用方式: android:id="@+id/banner" andro ...

  10. Banner本地,网络,图片轮播

    依赖: compile 'com.youth.banner:banner:1.4.9' 清单文件: <uses-permission android:name="android.per ...

最新文章

  1. go语言笔记——append是内置的函数!!!new是一个函数!!!调试可以使用闭包,本质上是print调试,尼玛!...
  2. TCP/IP——基本知识
  3. windows下编译firefox
  4. Spring事务详解与使用
  5. Linux工作笔记-两Linux系统互传文件(使用SSH)
  6. x264源代码简单分析:编码器主干部分-2
  7. java抽象类_Java抽象类
  8. 司空见惯 - 会议室名称
  9. 解决计算机主机与打印机共享打印机,HP M126A打印机共享打印机后必须得主机先打印一次后其他电脑才能打印问题的解决办法...
  10. 171221—8421BCD码、进制转换
  11. 2018-2019-1 20165309 20165312 20165330 实验一 开发环境的熟悉
  12. VR家装丨足不出户就能“浸”距离体验入住效果
  13. 各大程序员兼职平台靠谱嘛?这一篇文章就够了
  14. 钟南山:越晚“阳”,症状或越轻
  15. Vue3技术4之watch监视属性、watch时value问题
  16. 万兆局域网方案_家庭万兆方案性价比之选,10G网速不是梦!
  17. 新建STVP工程配置问题及解决方法(STM8/STM32)
  18. 使用MetaMask客户端获取以太坊测试网络ropsten测试币
  19. 你的工作单休,但是工资双休
  20. 编写应用程序,从命令行传入两个整型数作为除数和被除数。要求程序中捕获NumberFormatException 异常和ArithmeticException 异常,而且无论在哪种情况下,“总是被执行”

热门文章

  1. yaml参数文件的使用
  2. 你最该知道的事(高级)
  3. appid 原始id_微信开发之小程序登录相关的各类ID
  4. cass等距离等分线段的命令键_教你用CAD将线段等分,弧线也可定距等分!
  5. 【转】大数据【五十八】探索MapReduce过程及分组详解
  6. 18年NDVI斜率图生成
  7. 1024,身为程序员的我们更应该思考如何放慢脚步
  8. 长沙社区团购独角兽《兴盛优选》 18k 面试题记录,已拿offer!
  9. 魔窗-企业级Deeplink解决方案,你的App增长引擎!
  10. MySQL 之union all 与 order by 同时出现问题