youth.Banner 实现圆角矩形指示器的效果

2024-02-22 08:10

本文主要是介绍youth.Banner 实现圆角矩形指示器的效果,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近公司项目的Banner 需要实现圆角指示器和圆角图片的效果,以前用过几次youth 的banner,并且他的库也提供了自定义指示器 和 自定义布局的方法,所以果断的依赖进去,写好了两个指示器的shape,运行,然后效果就不对了,我们设置的圆角矩形变成了方形,然后我也去github上看了看,也有遇到类似问题的朋友,不过他们需求改了,所以没去研究。

我发现另一个哥们基于 这个banner库 做了修改,实现的功能。但是我依赖的时候一直报错,排查一番后没有找到具体的问题,最后下载了两人的源码,分析了一下思路。最后实现了这个功能。

这是两位大佬的github地址,如果是实现一般的banner效果的朋友,可以直接用

原文链接:https://github.com/youth5201314/banner

参考:https://github.com/wenchaosong/Banner

 

先上一张效果图

 

好了,接下来开始今天的正式内容

在BannerConfig中增加一种style :  CUSTOM_INDICATION = 6

 

查看了他们两位的源码,指示器都是通过一个LinearLayout来实现的,我就复用了他们写的linearlayout 添加指示器效果

在Banner -》 createIndicator()  方法中添加一个 custom_params 计算linearLayout的宽高

 LinearLayout.LayoutParams custom_params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
                    LinearLayout.LayoutParams.WRAP_CONTENT);
            custom_params.leftMargin = mIndicatorMargin;
            custom_params.rightMargin = mIndicatorMargin;

接着根据传进来的style 判断显示不同linearlayout中的效果

if (bannerStyle == BannerConfig.CIRCLE_INDICATOR ||bannerStyle == BannerConfig.CIRCLE_INDICATOR_TITLE)indicator.addView(imageView, params);
else if (bannerStyle == BannerConfig.CIRCLE_INDICATOR_TITLE_INSIDE)indicatorInside.addView(imageView, params);
else if (bannerStyle == BannerConfig.CUSTOM_INDICATOR)indicator.addView(imageView, custom_params);

可以看到最后的这个就是我门自己 自定义的显示类型。当然还有、需要在以下三个方法中

BannerPagerAdapter - 》onPageSelected 、
setBannerStyleUI(),
initImages()
添加bannerStyle == BannerConfig.CUSTOM_INDICATOR 的判断。

但是,复用indicator 虽然能实现圆角矩形的效果,但是他的位置在标题栏上边,因为他的相对布局中有android:layout_below="@+id/circleIndicator",这就导致我们实现的效果不对

而另一个indicatorInside 实现的效果就是方形的效果,所以直接不用。

 

最后我是新增了一个LinearLayout,专门用来显示一些自定义指示器的效果。

else if (bannerStyle == BannerConfig.CUSTOM_INDICATOR)
                roundIndicator.addView(imageView, custom_params);

这样就实现了圆角矩形指示器的效果。

因为我还需要实现圆角图片,所以我在imageLoader中返回了圆角的imageView,并且复制出banner.xml 的内容,给标题栏的背景添加底部圆角的背景。

 

最后附上源码地址,只是在原来的基础上新增了一写判断和布局,没有去做过多的修改

https://github.com/XW837156540/Banner

这篇关于youth.Banner 实现圆角矩形指示器的效果的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/734639

相关文章

MySQL进行分片合并的实现步骤

《MySQL进行分片合并的实现步骤》分片合并是指在分布式数据库系统中,将不同分片上的查询结果进行整合,以获得完整的查询结果,下面就来具体介绍一下,感兴趣的可以了解一下... 目录环境准备项目依赖数据源配置分片上下文分片查询和合并代码实现1. 查询单条记录2. 跨分片查询和合并测试结论分片合并(Shardin

Spring Security重写AuthenticationManager实现账号密码登录或者手机号码登录

《SpringSecurity重写AuthenticationManager实现账号密码登录或者手机号码登录》本文主要介绍了SpringSecurity重写AuthenticationManage... 目录一、创建自定义认证提供者CustomAuthenticationProvider二、创建认证业务Us

MySQL配置多主复制的实现步骤

《MySQL配置多主复制的实现步骤》多主复制是一种允许多个MySQL服务器同时接受写操作的复制方式,本文就来介绍一下MySQL配置多主复制的实现步骤,具有一定的参考价值,感兴趣的可以了解一下... 目录1. 环境准备2. 配置每台服务器2.1 修改每台服务器的配置文件3. 安装和配置插件4. 启动组复制4.

MySQL数据脱敏的实现方法

《MySQL数据脱敏的实现方法》本文主要介绍了MySQL数据脱敏的实现方法,包括字符替换、加密等方法,通过工具类和数据库服务整合,确保敏感信息在查询结果中被掩码处理,感兴趣的可以了解一下... 目录一. 数据脱敏的方法二. 字符替换脱敏1. 创建数据脱敏工具类三. 整合到数据库操作1. 创建服务类进行数据库

MySQL容灾备份的实现方案

《MySQL容灾备份的实现方案》进行MySQL的容灾备份是确保数据安全和业务连续性的关键步骤,容灾备份可以分为本地备份和远程备份,主要包括逻辑备份和物理备份两种方式,下面就来具体介绍一下... 目录一、逻辑备份1. 使用mysqldump进行逻辑备份1.1 全库备份1.2 单库备份1.3 单表备份2. 恢复

Java对接MQTT协议的完整实现示例代码

《Java对接MQTT协议的完整实现示例代码》MQTT是一个基于客户端-服务器的消息发布/订阅传输协议,MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛,:本文主要介绍Ja... 目录前言前置依赖1. MQTT配置类代码解析1.1 MQTT客户端工厂1.2 MQTT消息订阅适配器1.

MySQL中处理数据的并发一致性的实现示例

《MySQL中处理数据的并发一致性的实现示例》在MySQL中处理数据的并发一致性是确保多个用户或应用程序同时访问和修改数据库时,不会导致数据冲突、数据丢失或数据不一致,MySQL通过事务和锁机制来管理... 目录一、事务(Transactions)1. 事务控制语句二、锁(Locks)1. 锁类型2. 锁粒

MyBatis流式查询两种实现方式

《MyBatis流式查询两种实现方式》本文详解MyBatis流式查询,通过ResultHandler和Cursor实现边读边处理,避免内存溢出,ResultHandler逐条回调,Cursor支持迭代... 目录MyBATis 流式查询详解:ResultHandler 与 Cursor1. 什么是流式查询?

Springboot项目登录校验功能实现

《Springboot项目登录校验功能实现》本文介绍了Web登录校验的重要性,对比了Cookie、Session和JWT三种会话技术,分析其优缺点,并讲解了过滤器与拦截器的统一拦截方案,推荐使用JWT... 目录引言一、登录校验的基本概念二、HTTP协议的无状态性三、会话跟android踪技术1. Cook

C++归并排序代码实现示例代码

《C++归并排序代码实现示例代码》归并排序将待排序数组分成两个子数组,分别对这两个子数组进行排序,然后将排序好的子数组合并,得到排序后的数组,:本文主要介绍C++归并排序代码实现的相关资料,需要的... 目录1 算法核心思想2 代码实现3 算法时间复杂度1 算法核心思想归并排序是一种高效的排序方式,需要用