• Stars
    star
    4,160
  • Rank 9,980 (Top 0.3 %)
  • Language
    Java
  • Created over 9 years ago
  • Updated about 3 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

引导界面滑动导航 + 大于等于1页时无限轮播 + 各种切换动画轮播效果

🏃BGABanner-Android🏃

目录

功能介绍

  • 引导界面导航效果
  • 支持根据服务端返回的数据动态设置广告条的总页数
  • 支持大于等于1页时的无限循环自动轮播、手指按下暂停轮播、抬起手指开始轮播
  • 支持自定义指示器位置和广告文案位置
  • 支持图片指示器和数字指示器
  • 支持 ViewPager 各种切换动画
  • 支持选中特定页面
  • 支持监听 item 点击事件
  • 加载网络数据时支持占位图设置,避免出现整个广告条空白的情况
  • 多个 ViewPager 跟随滚动

效果图与示例 apk

banner

点击下载 BGABannerDemo.apk 或扫描下面的二维码安装

BGABannerDemo apk文件二维

常见问题

  1. 结合 Fresco 加载图片请参考 FrescoDemoActivity
  2. 自定义 item 布局文件请参考 FrescoDemoActivity

使用

1.添加 Gradle 依赖

  • maven { url 'https://jitpack.io' } 添加到 root build.gradle 的 repositories 中
  • 在 app build.gradle 中添加如下依赖,末尾的「latestVersion」指的是徽章 里的版本名称,请自行替换
implementation 'androidx.legacy:legacy-support-v4:latestVersion'
implementation 'com.github.bingoogolapple:BGABanner-Android:latestVersion'

2.在布局文件中添加 BGABanner

<cn.bingoogolapple.bgabanner.BGABanner
    android:id="@+id/banner_guide_content"
    style="@style/MatchMatch"
    app:banner_pageChangeDuration="1000"
    app:banner_pointAutoPlayAble="false"
    app:banner_pointContainerBackground="@android:color/transparent"
    app:banner_pointDrawable="@drawable/bga_banner_selector_point_hollow"
    app:banner_pointTopBottomMargin="15dp"
    app:banner_transitionEffect="alpha" />

3.在 Activity 或者 Fragment 中配置 BGABanner 的数据源

有多种配置数据源的方式,这里仅列出三种方式。更多初始化方式请查看 demo

配置数据源的方式1:通过传入数据模型并结合 Adapter 的方式配置数据源。这种方式主要用于加载网络图片,以及实现少于3页时的无限轮播

mContentBanner.setAdapter(new BGABanner.Adapter<ImageView, String>() {
    @Override
    public void fillBannerItem(BGABanner banner, ImageView itemView, String model, int position) {
        Glide.with(MainActivity.this)
                .load(model)
                .placeholder(R.drawable.holder)
                .error(R.drawable.holder)
                .centerCrop()
                .dontAnimate()
                .into(itemView);
    }
});

mContentBanner.setData(Arrays.asList("网络图片路径1", "网络图片路径2", "网络图片路径3"), Arrays.asList("提示文字1", "提示文字2", "提示文字3"));

配置数据源的方式2:通过直接传入视图集合的方式配置数据源,主要用于自定义引导页每个页面布局的情况

List<View> views = new ArrayList<>();
views.add(View.inflate(context, R.layout.layout_guide_one, null));
views.add(View.inflate(context, R.layout.layout_guide_two, null));
views.add(View.inflate(context, R.layout.layout_guide_three, null));
mContentBanner.setData(views);

配置数据源的方式3:通过传入图片资源 id 的方式配置数据源,主要用于引导页每一页都是只显示图片的情况

// Bitmap 的宽高在 maxWidth maxHeight 和 minWidth minHeight 之间
BGALocalImageSize localImageSize = new BGALocalImageSize(720, 1280, 320, 640);
// 设置数据源
mContentBanner.setData(localImageSize, ImageView.ScaleType.CENTER_CROP,
        R.drawable.uoko_guide_background_1,
        R.drawable.uoko_guide_background_2,
        R.drawable.uoko_guide_background_3);

4.监听广告 item 的单击事件,在 BGABanner 里已经帮开发者处理了防止重复点击事件

mContentBanner.setDelegate(new BGABanner.Delegate<ImageView, String>() {
    @Override
    public void onBannerItemClick(BGABanner banner, ImageView itemView, String model, int position) {
        Toast.makeText(banner.getContext(), "点击了" + position, Toast.LENGTH_SHORT).show();
    }
});

5.设置「进入按钮」和「跳过按钮」控件资源 id 及其点击事件,如果进入按钮和跳过按钮有一个不存在的话就传 0,在 BGABanner 里已经帮开发者处理了防止重复点击事件,在 BGABanner 里已经帮开发者处理了「跳过按钮」和「进入按钮」的显示与隐藏

mContentBanner.setEnterSkipViewIdAndDelegate(R.id.btn_guide_enter, R.id.tv_guide_skip, new BGABanner.GuideDelegate() {
    @Override
    public void onClickEnterOrSkip() {
        startActivity(new Intent(GuideActivity.this, MainActivity.class));
        finish();
    }
});

自定义属性说明

<declare-styleable name="BGABanner">
    <!-- 指示点容器背景 -->
    <attr name="banner_pointContainerBackground" format="reference|color" />
    <!-- 指示点背景 -->
    <attr name="banner_pointDrawable" format="reference" />
    <!-- 指示点容器左右内间距 -->
    <attr name="banner_pointContainerLeftRightPadding" format="dimension" />
    <!-- 指示点上下外间距 -->
    <attr name="banner_pointTopBottomMargin" format="dimension" />
    <!-- 指示点左右外间距 -->
    <attr name="banner_pointLeftRightMargin" format="dimension" />
    <!-- 指示器的位置 -->
    <attr name="banner_indicatorGravity">
        <flag name="top" value="0x30" />
        <flag name="bottom" value="0x50" />
        <flag name="left" value="0x03" />
        <flag name="right" value="0x05" />
        <flag name="center_horizontal" value="0x01" />
    </attr>
    <!-- 是否开启自动轮播 -->
    <attr name="banner_pointAutoPlayAble" format="boolean" />
    <!-- 自动轮播的时间间隔 -->
    <attr name="banner_pointAutoPlayInterval" format="integer" />
    <!-- 页码切换过程的时间长度 -->
    <attr name="banner_pageChangeDuration" format="integer" />
    <!-- 页面切换的动画效果 -->
    <attr name="banner_transitionEffect" format="enum">
        <enum name="defaultEffect" value="0" />
        <enum name="alpha" value="1" />
        <enum name="rotate" value="2" />
        <enum name="cube" value="3" />
        <enum name="flip" value="4" />
        <enum name="accordion" value="5" />
        <enum name="zoomFade" value="6" />
        <enum name="fade" value="7" />
        <enum name="zoomCenter" value="8" />
        <enum name="zoomStack" value="9" />
        <enum name="stack" value="10" />
        <enum name="depth" value="11" />
        <enum name="zoom" value="12" />
    </attr>
    <!-- 提示文案的文字颜色 -->
    <attr name="banner_tipTextColor" format="reference|color" />
    <!-- 提示文案的文字大小 -->
    <attr name="banner_tipTextSize" format="dimension" />
    <!-- 加载网络数据时覆盖在 BGABanner 最上层的占位图 -->
    <attr name="banner_placeholderDrawable" format="reference" />
    <!-- 是否是数字指示器 -->
    <attr name="banner_isNumberIndicator" format="boolean" />
    <!-- 数字指示器文字颜色 -->
    <attr name="banner_numberIndicatorTextColor" format="reference|color" />
    <!-- 数字指示器文字大小 -->
    <attr name="banner_numberIndicatorTextSize" format="dimension" />
    <!-- 数字指示器背景 -->
    <attr name="banner_numberIndicatorBackground" format="reference" />
    <!-- 当只有一页数据时是否显示指示器,默认值为 false -->
    <attr name="banner_isNeedShowIndicatorOnOnlyOnePage" format="boolean" />
    <!-- 自动轮播区域距离 BGABanner 底部的距离,用于使指示器区域与自动轮播区域不重叠 -->
    <attr name="banner_contentBottomMargin" format="dimension"/>
    <!-- 宽高比例,如果大于 0,则会根据宽度来计算高度,否则使用 android:layout_height 指定的高度 -->
    <attr name="banner_aspectRatio" format="float"/>
    <!-- 占位图和资源图片缩放模式 -->
    <attr name="android:scaleType"/>
</declare-styleable>

代码是最好的老师,更多详细用法请查看 demo🐾

关于我

个人主页 邮箱 BGA 系列开源库 QQ 群 GitHub 喵(专注于 GitHub 等一切与程序员有关的内容)
bingoogolapple.cn [email protected] BGA_CODE_CLUB GitHub喵

打赏支持

如果您觉得 BGA 系列开源库帮你节省了大量的开发时间,请扫描下方的二维码随意打赏,要是能打赏个 10.24 🐵就太👍了。您的支持将鼓励我继续创作:octocat:

如果您目前正打算购买通往墙外的梯子,可以使用我的邀请码「YFQ9Q3B」购买 Lantern,双方都赠送三个月的专业版使用时间🍻

License

Copyright 2015 bingoogolapple

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

More Repositories

1

BGAQRCode-Android

QRCode 扫描二维码、扫描条形码、相册获取图片后识别、生成带 Logo 二维码、支持微博微信 QQ 二维码扫描样式
C
7,871
star
2

BGARefreshLayout-Android

多种下拉刷新效果、上拉加载更多、可配置自定义头部广告位
Java
4,313
star
3

BGABadgeView-Android

Android 徽章控件
Java
2,652
star
4

BGASwipeBackLayout-Android

Android Activity 滑动返回。支持微信滑动返回样式、横屏滑动返回、全屏滑动返回
Java
2,309
star
5

BGAPhotoPicker-Android

Android 图片选择、预览、九宫格图片控件、拖拽排序九宫格图片控件
Java
2,229
star
6

BGABaseAdapter-Android

在 AdapterView 和 RecyclerView 中通用的 Adapter 和 ViewHolder。RecyclerView 支持 DataBinding 、多种 Item 类型、添加 Header 和 Footer。RecyclerView 竖直方向通用分割线 BGADivider
Java
657
star
7

BGATransformersTip-Android

Android 通用 PopupWindow,再也不用找 UI 小姐姐切 .9 图片了,大致能为你节省 30 分钟的开发时间
Java
487
star
8

BGASwipeItemLayout-Android

类似 iOS 带弹簧效果的左右滑动控件,可作为 AbsListView 和 RecyclerView 的 item(作为 AbsListView 的 item 时的点击事件参考代码家的 https://github.com/daimajia/AndroidSwipeLayout )
Java
469
star
9

bga_issue_blog

Flutter 或 Vue 全家桶(Vue + VueRouter + Vuex + Axios)抓取 GitHub 上的 Issues,结合 GitHub Pages 搭建个人博客站点,支持 GitHub 登录和评论
Dart
270
star
10

BGAProgressBar-Android

带百分比数字的水平、圆形进度条
Java
252
star
11

BGATitleBar-Android

Android 仿 iOS UINavigationBar 风格的 TitleBar,适用于某些 UI 设计师只出 iOS 效果图的项目
Java
245
star
12

BGAFlowLayout-Android

Android 流式布局,可配置是否将每一行的空白区域平均分配给子控件
Java
202
star
13

BGAUpdate-Android

RxJava + Retrofit 下载新版 apk 文件,RxBus 监听下载进度
Java
194
star
14

AppInit

AppInit 是一款 Android 应用初始化框架,基于组件化的设计思路,功能灵活,使用简单。
Groovy
191
star
15

bingoogolapple.github.io

个人主页。同时也通过 Issues 记录学习笔记
HTML
86
star
16

BGACamera-Android

Android 相机开发学习笔记,参考 https://www.polarxiong.com/tag/camera
Kotlin
42
star
17

react-native-bga-badge-view

桥接 Android 中的自定义徽章控件到 React Native 的案例
Java
36
star
18

BGAAlertController-Android

仿写从 iOS8 开始支持的 UIAlertController
Java
34
star
19

BGARefreshLayoutDemo

测试 BGARefreshLayout 与 Activity、Fragment、ViewPager 的各种嵌套
Java
30
star
20

BGAWeiBo-Android

调用微博开放API模仿新浪微博Android客户端
Java
29
star
21

bga-back-top-vue

Vue-based back-top component 基于 Vue 2.x 实现的「滚动可滚动组件到顶部」的组件,支持多种自定义属性配置,以及通过 slot 插桩的方式深度定制 BgaBackTop 的内容。整个项目只需要在根组件中添加一次即可
Vue
29
star
22

BGAIndicator-Android

滑动指示器
Java
27
star
23

AndroidCustomViewPlayground

Android 自定义控件游乐场
Java
25
star
24

BGAOkVolley-Android

Volley+OkHttp+Gson
Java
24
star
25

HarmonyOS-Note

鸿蒙学习笔记
JavaScript
24
star
26

Graduation-Design

毕业设计
Java
20
star
27

bga-dart-full-stack-note

Dart 全栈开发学习笔记
JavaScript
18
star
28

BGAImageView-Android

Java
14
star
29

Meiqia-SDK-Android-UE-EC

Java
14
star
30

MediaNote-Android

Android音视频播放学习笔记
Java
12
star
31

BGAMenu

滑动菜单
Java
11
star
32

BGASelectView-Android

类似 web 开发中的 select 标签实现的级联效果
Java
11
star
33

bga-chrome-plugin-note

Chrome 插件开发学习笔记
JavaScript
10
star
34

BGAAnnotation-Android

Android Annotation
Java
9
star
35

XMPPNote-Android

Android平台XMPP学习笔记
Java
8
star
36

Android-Training

2013年android实训
Java
8
star
37

AndroidGameNote

AndroidGameNote
Java
7
star
38

PublishAar

发布Aar到Maven中央仓库和Bintray中
7
star
39

ControlToggleView

控制开关,点击开关后提供回调接口来处理是否执行某项操作
Java
6
star
40

NDKNote-AndroidStudio

AndroidStudio 版的 NDK 学习笔记
C
6
star
41

DataBindingNote

DataBinding学习笔记
Java
6
star
42

MaterialDesignSupportNote

MaterialDesignSupportLibrary学习笔记
Java
5
star
43

OCNote-PartOne

OC学习笔记第一部分
Objective-C
5
star
44

AndroidNote-PartOne

Android学习笔记
Java
5
star
45

RedEnvelope

过年期间自动抢支付宝红包
Java
5
star
46

SwiftNote-PartOne

Swift学习笔记第一部分
Swift
4
star
47

spring-boot-kotlin

Spring Boot Kotlin
JavaScript
3
star
48

plugin-idea

IDEA 插件学习
Kotlin
3
star
49

SwiftNote-PartTwo

Swift学习笔记第二部分
Objective-C
3
star
50

GradlePluginNote

Groovy
3
star
51

AptNote

Java
3
star
52

AlgorithmAndDesignPatternNote

算法和设计模式学习笔记
Java
3
star
53

dsl-note

Groovy、Gradle、Kotlin 学习笔记
Java
3
star
54

GradleNote

Gradle学习笔记
Java
2
star
55

bga-js-full-stack-note

JS 全栈开发学习笔记
TypeScript
2
star
56

bga-ss-docker

ShadowSocks Docker 镜像,带 UI 界面
Dockerfile
2
star
57

BGABlogBackup

博客备份
CSS
2
star
58

bga-vite-plugin-crx-hmr

用于开发 Chromium manifest v3 插件的 Vite 插件,主要提供热重载功能,快速更新,高效开发
TypeScript
2
star
59

cc-dxg-2d

基于 Cocos Creator 开发的智能版大西瓜小芝麻
TypeScript
2
star
60

bga-vscode-plugin-note

VS Code 插件开发学习笔记
TypeScript
2
star
61

bga-rust-full-stack-note

Rust 全栈开发学习笔记
Rust
2
star
62

js-full-stack-demo

JavaScript
1
star
63

xcx-wx-note

微信小程序学习笔记
JavaScript
1
star
64

BGAChartViewDemo-iOS

iOS自定义图表控件案例
Objective-C
1
star
65

NodeJSNote

NodeJS学习笔记
JavaScript
1
star
66

ReactNativeNote

ReactNative学习笔记
JavaScript
1
star
67

bga-ci-docker

CI 相关 Docker 镜像
Dockerfile
1
star
68

JSFullStackNote

JSFullStackNote
JavaScript
1
star
69

BGACalendar-Android

Android日历和时间选择控件
Java
1
star
70

golang-note

Golang 学习笔记
Go
1
star
71

gang-hui-parking-payment

港汇停车缴费
1
star
72

PythonNote

Python 学习笔记
Python
1
star
73

BGAImageLoader-Android

Java
1
star
74

OCNote-PartTwo

OC学习笔记第二部分
Objective-C
1
star
75

taro-note

taro 学习笔记
JavaScript
1
star