Android banner,轮播图自动滚动控件

简介

现在的绝大数app都有banner界面,实现循环播放多个广告图片和手动滑动循环等功能。因为ViewPager并不支持循环翻页, 所以要实现循环还得需要自己去动手,我就把项目中的控件剔了出来,希望大家觉得有用。目前框架可以进行不同样式、不同动画设置, 以及完善的api方法能满足大部分的需求了。

常量

常量名称 描述 所属方法
BannerConfig.NOT_INDICATOR 不显示指示器和标题 setBannerStyle
BannerConfig.CIRCLE_INDICATOR 显示圆形指示器 setBannerStyle
BannerConfig.NUM_INDICATOR 显示数字指示器 setBannerStyle
BannerConfig.NUM_INDICATOR_TITLE 显示数字指示器和标题 setBannerStyle
BannerConfig.CIRCLE_INDICATOR_TITLE 显示圆形指示器和标题(垂直显示) setBannerStyle
BannerConfig.CIRCLE_INDICATOR_TITLE_INSIDE 显示圆形指示器和标题(水平显示) setBannerStyle
BannerConfig.LEFT 指示器居左 setIndicatorGravity
BannerConfig.CENTER 指示器居中 setIndicatorGravity
BannerConfig.RIGHT 指示器居右 setIndicatorGravity

动画常量类(setBannerAnimation方法调用)

常量类名
Transformer.Default
Transformer.Accordion
Transformer.BackgroundToForeground
Transformer.ForegroundToBackground
Transformer.CubeIn
Transformer.CubeOut
Transformer.DepthPage
Transformer.FlipHorizontal
Transformer.FlipVertical
Transformer.RotateDown
Transformer.RotateUp
Transformer.ScaleInOut
Transformer.Stack
Transformer.Tablet
Transformer.ZoomIn
Transformer.ZoomOut
Transformer.ZoomOutSlide

方法
这里写图片描述
这里写图片描述

Attributes属性(banner布局文件中调用)

这里写图片描述

使用步骤

Step 1.依赖banner

Gradle
dependencies{
   compile 'com.youth.banner:banner:1.4.2'  //最新版本
   or
   compile 'com.youth.banner:banner:1.3.3' //旧版本,旧版本用法下面有跳转链接}

或者引用本地lib

compile project(':banner')

Step 2.添加权限到你的 AndroidManifest.xml

<!-- if you want to load images from the internet --><uses-permission android:name="android.permission.INTERNET" /> 

<!-- if you want to load images from a file OR from the internet --><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

Step 3.在布局文件中添加Banner,可以设置自定义属性

!!!此步骤可以省略,直接在Activity或者Fragment中new Banner();

<com.youth.banner.Banner    xmlns:app="http://schemas.android.com/apk/res-auto"
   android:id="@+id/banner"
   android:layout_width="match_parent"
   android:layout_height="高度自己设置" />

Step 4.重写图片加载器

public class GlideImageLoader extends ImageLoader {
    @Override
    public void displayImage(Context context, Object path, ImageView imageView) {
        /**
          常用的图片加载库:
          Universal Image Loader:一个强大的图片加载库,包含各种各样的配置,最老牌,使用也最广泛。      
          Picasso: Square出品,必属精品。和OkHttp搭配起来更配呦!          
          Volley ImageLoader:Google官方出品,可惜不能加载本地图片~          
          Fresco:Facebook出的,天生骄傲!不是一般的强大。         
          Glide:Google推荐的图片加载库,专注于流畅的滚动。
         */

        //Glide 加载图片简单用法
        Glide.with(context).load(path).into(imageView);

        //Picasso 加载图片简单用法
        Picasso.with(context).load(path).into(imageView)

        //用fresco加载图片简单用法
        Uri uri = Uri.parse((String) path);
        imageView.setImageURI(uri);
    }
    //提供createImageView 方法,如果不用可以不重写这个方法,方便fresco自定义ImageView
    @Override
    public ImageView createImageView(Context context) {
        SimpleDraweeView simpleDraweeView=new SimpleDraweeView(context);
        return simpleDraweeView;
    }
}

Step 5.在Activity或者Fragment中配置Banner

--------------------------简单使用-------------------------------
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Banner banner = (Banner) findViewById(R.id.banner);
    //设置图片加载器
    banner.setImageLoader(new GlideImageLoader());
    //设置图片集合
    banner.setImages(images);
    //banner设置方法全部调用完毕时最后调用
    banner.start();
}
--------------------------详细使用-------------------------------
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Banner banner = (Banner) findViewById(R.id.banner);
    //设置banner样式
    banner.setBannerStyle(BannerConfig.CIRCLE_INDICATOR_TITLE);
    //设置图片加载器
    banner.setImageLoader(new GlideImageLoader());
    //设置图片集合
    banner.setImages(images);
    //设置banner动画效果
    banner.setBannerAnimation(Transformer.DepthPage);
    //设置标题集合(当banner样式有显示title时)
    banner.setBannerTitles(Arrays.asList(titles));
    //设置自动轮播,默认为true
    banner.isAutoPlay(true);
    //设置轮播时间
    banner.setDelayTime(1500);
    //设置指示器位置(当banner模式中有指示器时)
    banner.setIndicatorGravity(BannerConfig.CENTER);
    //banner设置方法全部调用完毕时最后调用
    banner.start();
}
-----------------当然如果你想偷下懒也可以这么用--------------------
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Banner banner = (Banner) findViewById(R.id.banner);
    banner.setImages(images).setImageLoader(new GlideImageLoader()).start();
}

混淆代码

# glide 的混淆代码-keep public class * implements com.bumptech.glide.module.GlideModule-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {  **[] $VALUES;  public *;
}
# banner 的混淆代码-keep class com.youth.banner.** {    *;
}
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Android Studio中的Banner轮播图是一种常见的UI组件,用于在应用程序中展示多张片或广告。它通常由一个ViewPager和一个Indicator组成,ViewPager用于滑动展示片,Indicator用于指示当前展示的片位置。在Android Studio中,可以使用ViewPager和Indicator库来实现Banner轮播图,也可以自定义实现。 ### 回答2: Android Studio 是 Android 开发人员用来开发移动应用程序的集成开发环境。Android Studio 提供了许多强大的工具和资源来加速应用程序的开发和测试。其中之一是实现 Banner 轮播图的功能,下面将对如何实现该功能进行详细介绍。 1. 导入轮播图Android Studio 中有很多轮播图库可以使用,比如 ViewPager、Banner、ConvenientBanner 等。在这里以使用 Banner 为例进行讲解,Banner 是一个轮播图库,它提供了丰富的自定义属性和回调方法。要使用 Banner,需要在项目的 build.gradle 文件中添加如下依赖: ```gradle dependencies { compile 'com.youth.banner:banner:1.4.10' } ``` 2. 在布局文件中添加 Banner 在 xml 布局文件中添加 Banner 控件,可以通过属性来自定义轮播图效果。例如: ```xml <com.youth.banner.Banner android:id="@+id/banner" android:layout_width="match_parent" android:layout_height="200dp" android:layout_marginTop="10dp" app:banner_indicator_visibility="visible" app:banner_layout="@layout/banner_item" app:banner_style="circle" app:banner_auto_play="true" app:banner_delay_time="4000"/> ``` 其中,banner_indicator_visibility 属性控制指示器的显示和隐藏,banner_layout 属性用于指定轮播图的 item 布局文件,banner_style 属性用于指定指示器的样式,banner_auto_play 属性用于控制是否自动播放,banner_delay_time 属性用于设置轮播时间间隔。 3. 在 Java 代码中初始化 Banner 在 Java 代码中获取 Banner 控件的引用,并为其提供数据源和设置监听事件等。例如: ```java public class MainActivity extends AppCompatActivity { private Banner banner; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); banner = findViewById(R.id.banner); List<Integer> images = new ArrayList<>(); images.add(R.drawable.banner1); images.add(R.drawable.banner2); images.add(R.drawable.banner3); images.add(R.drawable.banner4); banner.setImages(images) .setImageLoader(new GlideImageLoader()) .setOnBannerListener(new OnBannerListener() { @Override public void OnBannerClick(int position) { Toast.makeText(MainActivity.this, "你点击了第" + position + "个", Toast.LENGTH_SHORT).show(); } }) .start(); } } ``` 其中,setImages() 方法用于设置轮播图的数据源,setImageLoader() 方法用于指定片加载器,setOnBannerListener() 方法用于设置轮播图的点击监听事件,start() 方法用于启动轮播图。在这里,使用了 GlideImageLoader,需要在项目的 build.gradle 文件中添加如下依赖: ```gradle dependencies { compile 'com.github.bumptech.glide:glide:4.12.0' annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0' } ``` 至此,可以在应用程序中很方便地实现 Banner 轮播图效果了。 ### 回答3: Banner轮播图Android应用程序中常见的UI元素之一,它可以让用户浏览片或广告,提高应用的用户体验度和推广效果。在Android Studio中实现Banner轮播图可以使用第三方框架或自定义控件的方式。 第一种方法是使用第三方框架,例如ViewPagerIndicator、BannerViewPager、LoopViewPager等。这些框架可以简化Banner轮播图的开发,提供丰富的定制化选项,同时也提供了更好的性能和资源管理。使用这些框架需要先导入相关依赖包,并按照框架提供的API进行配置和调用。 第二种方法是自定义控件实现Banner轮播图。这需要开发者对Android控件的绘制、布局和事件处理有一定的理解和实践经验。自定义控件实现Banner轮播图的主要步骤包括继承ViewGroup或其子类、绘制轮播图内容、处理手势事件、定时切换轮播图等。相比使用第三方框架,自定义控件需要投入更多的开发工作,但也可以实现更加灵活、定制化的效果。 无论采用何种方法,实现Banner轮播图都需要注意以下几点: 1. 片资源的加载和缓存管理,可以使用第三方框架或片加载库。 2. 轮播图的切换方式和效果,可以实现手动/自动切换、左右/上下滑动、片淡入淡出等方式。 3. 轮播图指示器的设计和状态切换,可以使用圆点、数字、片等样式,同时需要考虑不同状态下指示器的颜色、大小等变化。 4. 轮播图的点击事件处理,可以实现点击某张片后跳转到对应的网址、文章、商品详情等界面。 综上所述,Banner轮播图Android应用界面中重要的元素之一,可通过第三方框架或自定义控件实现。实现Banner轮播图需要开发者注意片资源管理、切换效果、指示器的设计和点击事件处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值