MCPcopy Index your code
hub / github.com/bingoogolapple/BGABanner-Android

github.com/bingoogolapple/BGABanner-Android @3.0.1

Chat with this repo
repository ↗ · DeepWiki ↗ · release 3.0.1 ↗ · + Follow
246 symbols 541 edges 31 files 58 documented · 24% updated 19mo ago★ 4,15954 open issues
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

:running:BGABanner-Android:running:

目录

功能介绍

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

    <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" />

    <attr name="banner_isNeedShowIndicatorOnOnlyOnePage" format="boolean" />

    <attr name="banner_contentBottomMargin" format="dimension"/>

    <attr name="banner_aspectRatio" format="float"/>

    <attr name="android:scaleType"/>
</declare-styleable>

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

关于我

个人主页 邮箱 BGA系列开源库QQ群
bingoogolapple.cn bingoogolapple@gmail.com BGA_CODE_CLUB

打赏支持

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

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

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.

Extension points exported contracts — how you extend this code

Delegate (Interface)
item 点击事件监听器,在 BGABanner 里已经帮开发者处理了防止重复点击事件 @param item 视图类型,如果没有在 setData 方法里指定自定义的 item 布局资源文件的话,这里的 V 就是 ImageVi [4 …
library/src/main/java/cn/bingoogolapple/bgabanner/BGABanner.java
Engine (Interface)
作者:王浩 邮件:bingoogolapple@gmail.com 创建时间:15/9/17 下午12:44 描述:
demo/src/main/java/cn/bingoogolapple/bgabanner/demo/engine/Engine.java
Adapter (Interface)
适配器,在 fillBannerItem 方法中填充数据,加载网络图片等 @param item 视图类型,如果没有在 setData 方法里指定自定义的 item 布局资源文件的话,这里的 V 就是 ImageView @par [4 …
library/src/main/java/cn/bingoogolapple/bgabanner/BGABanner.java
GuideDelegate (Interface)
引导页「进入」和「跳过」按钮点击事件监听器,在 BGABanner 里已经帮开发者处理了防止重复点击事件 [1 implementers]
library/src/main/java/cn/bingoogolapple/bgabanner/BGABanner.java
AutoPlayDelegate (Interface)
(no doc) [1 implementers]
library/src/main/java/cn/bingoogolapple/bgabanner/BGAViewPager.java

Core symbols most depended-on inside this repo

getInstance
called by 12
demo/src/main/java/cn/bingoogolapple/bgabanner/demo/App.java
setData
called by 9
library/src/main/java/cn/bingoogolapple/bgabanner/BGABanner.java
setCurrentItem
called by 9
library/src/main/java/cn/bingoogolapple/bgabanner/BGABanner.java
isCollectionEmpty
called by 9
library/src/main/java/cn/bingoogolapple/bgabanner/BGABannerUtil.java
getCurrentItem
called by 8
library/src/main/java/cn/bingoogolapple/bgabanner/BGABanner.java
setAdapter
called by 8
library/src/main/java/cn/bingoogolapple/bgabanner/BGABanner.java
startAutoPlay
called by 7
library/src/main/java/cn/bingoogolapple/bgabanner/BGABanner.java
getItemCount
called by 6
library/src/main/java/cn/bingoogolapple/bgabanner/BGABanner.java

Shape

Method 206
Class 34
Interface 5
Enum 1

Languages

Java100%

Modules by API surface

library/src/main/java/cn/bingoogolapple/bgabanner/BGABanner.java70 symbols
library/src/main/java/cn/bingoogolapple/bgabanner/BGABannerUtil.java15 symbols
demo/src/main/java/cn/bingoogolapple/bgabanner/demo/ui/activity/RecyclerViewDemoActivity.java15 symbols
demo/src/main/java/cn/bingoogolapple/bgabanner/demo/ui/activity/ListViewDemoActivity.java12 symbols
library/src/main/java/cn/bingoogolapple/bgabanner/BGAViewPager.java11 symbols
library/src/main/java/cn/bingoogolapple/bgabanner/BGALocalImageSize.java10 symbols
demo/src/main/java/cn/bingoogolapple/bgabanner/demo/ui/activity/MainActivity.java10 symbols
library/src/main/java/cn/bingoogolapple/bgabanner/transformer/ZoomPageTransformer.java7 symbols
demo/src/main/java/cn/bingoogolapple/bgabanner/demo/ui/activity/GuideActivity.java7 symbols
library/src/main/java/cn/bingoogolapple/bgabanner/transformer/RotatePageTransformer.java6 symbols
library/src/main/java/cn/bingoogolapple/bgabanner/transformer/DepthPageTransformer.java6 symbols
library/src/main/java/cn/bingoogolapple/bgabanner/transformer/CubePageTransformer.java6 symbols

For agents

$ claude mcp add BGABanner-Android \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact