Android banner详解用法案例

Android----banner使用详解

昨天10.31 ,斗破苍穹的三年之约终于出来了,自己也等了很久很久,敬师长,敬家人,敬朋友,敬每一个前行路上正在奋战的自己,星光不问赶路人,时间不负有心人。

效果图:

添加依赖

  implementation 'com.youth.banner:banner:2.1.0'

添加权限到你的 AndroidManifest.xml

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

布局文件

<com.youth.banner.Banner
        android:id="@+id/banner"
        android:layout_width="0dp"
        android:layout_height="250dp"
        android:layout_margin="10dp"
        app:banner_radius="20dp"    // 圆角
        android:clickable="true"   //  是否可点击
        app:banner_indicator_selected_color="#95F2EC"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.157"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

逻辑代码

package com.hnucm.xiaotang;

import android.os.Bundle;

import androidx.fragment.app.Fragment;

import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.bumptech.glide.Glide;
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
import com.bumptech.glide.request.RequestOptions;
import com.youth.banner.Banner;
import com.youth.banner.adapter.BannerImageAdapter;
import com.youth.banner.holder.BannerImageHolder;
import com.youth.banner.indicator.CircleIndicator;
import com.youth.banner.listener.OnBannerListener;

import org.json.JSONArray;
import org.json.JSONException;
import org.xutils.common.Callback;
import org.xutils.http.RequestParams;
import org.xutils.x;

import java.util.ArrayList;
import java.util.List;

public class ShouYeFragment extends Fragment implements OnBannerListener {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View inflate = inflater.inflate(R.layout.fragment_shou_ye, container, false);
        Banner banner =inflate.findViewById(R.id.banner);
        List<String> imgList = new ArrayList<>();

        x.Ext.init(getActivity().getApplication());
        x.Ext.setDebug(BuildConfig.DEBUG);  // 是否输出debug日志, 开启debug会影响性能.
        x.view().inject(getActivity());  //没有用到view注解可以先不用

        imgList.add("https://cdn.jsdelivr.net/gh/Yqifei/Blog-Image@master/20211026/image.6719h9mvs700.png");
        imgList.add("https://cdn.jsdelivr.net/gh/Yqifei/Blog-Image@master/20211031/800-(11).2txrpbqztva0.jpg");
        imgList.add("https://cdn.jsdelivr.net/gh/Yqifei/Blog-Image@master/20211031/800-(5).5s6zwxy19v40.jpg");
        imgList.add("https://cdn.jsdelivr.net/gh/Yqifei/Blog-Image@master/20211031/800-(10).24p8puxcmqbk.jpg");
        imgList.add("https://cdn.jsdelivr.net/gh/Yqifei/Blog-Image@master/20211031/800-(14).pizaxijh534.jpg");

        RequestParams params = new RequestParams("https://www.fastmock.site/mock/08392ee207964eb010bf22b157103494/androidJavaEE/banner");
        x.http().get(params, new Callback.CommonCallback<String>() {
            @Override
            public void onSuccess(String result) {
                try {
                    JSONArray jsonArray = new JSONArray(result);
                    for (int i=0;i<jsonArray.length();i++){
                        imgList.add((String)jsonArray.get(i));
                    }
                    banner.setDatas(imgList);    //  动态更新banner数据
                } catch (JSONException e) {
                    e.printStackTrace();
                }

            }
            @Override
            public void onError(Throwable ex, boolean isOnCallback) {
            }
            @Override
            public void onCancelled(CancelledException cex) {
            }
            @Override
            public void onFinished() {
            }
        });

        banner.setAdapter(new BannerImageAdapter<String>(imgList) {

            @Override
            public void onBindView(BannerImageHolder holder, String data, int position, int size) {
                System.out.println("hello TEST");
                Glide.with(holder.itemView)
                        .load(data)
                        .apply(RequestOptions.bitmapTransform(new RoundedCorners(30)))
                        .into(holder.imageView);
            }

        }).setIndicator(new 				                      CircleIndicator(getContext())).setLoopTime(1000).setOnBannerListener(this);
        //  设置圆形指示点,设置循环时间,设置监听器
        return inflate;
    }

    @Override
    public void OnBannerClick(Object data, int position) {   //  监听每一个图片的点击事件
        Log.i("tag", "你点了第"+position+"张轮播图");
    }
}

常见的一些属性设置

方法

更多方法以实际使用为准,下面不一定全部列出了

方法名 返回类型 描述
getAdapter() extends BannerAdapter 获取你设置的BannerAdapter
getViewPager2() ViewPager2 获取ViewPager2
getIndicator() Indicator 获取你设置的指示器(没有设置直接获取会抛异常哦)
getIndicatorConfig() IndicatorConfig 获取你设置的指示器配置信息(没有设置直接获取会抛异常哦)
getRealCount() int 返回banner真实总数
setUserInputEnabled(boolean) this 禁止手动滑动Banner;true 允许,false 禁止
setDatas(List) this 重新设置banner数据
isAutoLoop(boolean) this 是否允许自动轮播
setLoopTime(long) this 设置轮播间隔时间(默认3000毫秒)
setScrollTime(long) this 设置轮播滑动的时间(默认800毫秒)
start() this 开始轮播(主要配合生命周期使用),或者你手动暂停再次启动
stop() this 停止轮播(主要配合生命周期使用),或者你需要手动暂停
setAdapter(T extends BannerAdapter) this 设置banner的适配器
setAdapter(T extends BannerAdapter,boolean) this 设置banner的适配器,是否支持无限循环
setOrientation(@Orientation) this 设置banner轮播方向(垂直or水平)
setOnBannerListener(this) this 设置点击事件,下标是从0开始
addOnPageChangeListener(this) this 添加viewpager2的滑动监听
setPageTransformer(PageTransformer) this 设置viewpager的切换效果
addPageTransformer(PageTransformer) this 添加viewpager的切换效果(可以设置多个)
setIndicator(Indicator) this 设置banner轮播指示器(提供有base和接口,可以自定义)
setIndicator(Indicator,boolean) this 设置指示器(传false代表不将指示器添加到banner上,配合布局文件,可以自我发挥)
setIndicatorSelectedColor(@ColorInt) this 设置指示器选中颜色
setIndicatorSelectedColorRes(@ColorRes) this 设置指示器选中颜色
setIndicatorNormalColor(@ColorInt) this 设置指示器默认颜色
setIndicatorNormalColorRes(@ColorRes) this 设置指示器默认颜色
setIndicatorGravity(@IndicatorConfig.Direction) this 设置指示器位置(左,中,右)
setIndicatorSpace(int) this 设置指示器之间的间距
setIndicatorMargins(IndicatorConfig.Margins) this 设置指示器的Margins
setIndicatorWidth(int,int) this 设置指示器选中和未选中的宽度,直接影响绘制指示器的大小
setIndicatorNormalWidth(int) this 设置指示器未选中的宽度
setIndicatorSelectedWidth(int) this 设置指示器选中的宽度
setIndicatorRadius(int) this 设置指示器圆角,不要圆角可以设置为0
setIndicatorHeight(int) this 设置指示器高度
setBannerRound(float) this 设置banner圆角(还有一种setBannerRound2方法,需要5.0以上)
setBannerGalleryEffect(int,int,float) this 画廊效果
setBannerGalleryMZ(int,float) this 魅族效果
setStartPosition(int) this 设置开始的位置 (需要在setAdapter或者setDatas之前调用才有效哦)
setIndicatorPageChange() this 设置指示器改变监听 (一般是为了配合数据操作使用,看情况自己发挥)
setCurrentItem() this 设置当前位置,和原生使用效果一样
addBannerLifecycleObserver() this 给banner添加生命周期观察者,内部自动管理banner的生命周期

在banner布局文件中调用,如果你自定义了indicator请做好兼容处理。 下面的属性并不是每个指示器都用得到,所以使用时要注意!

Attributes format describe
banner_loop_time integer 轮播间隔时间,默认3000
banner_auto_loop boolean 是否自动轮播,默认true
banner_infinite_loop boolean 是否支持无限循环(即首尾直接过渡),默认true
banner_orientation enum 轮播方向:horizontal(默认) or vertical
banner_radius dimension banner圆角半径,默认0(不绘制圆角)
banner_indicator_normal_width dimension 指示器默认的宽度,默认5dp (对RoundLinesIndicator无效)
banner_indicator_selected_width dimension 指示器选中的宽度,默认7dp
banner_indicator_normal_color color 指示器默认颜色,默认0x88ffffff
banner_indicator_selected_color color 指示器选中颜色,默认0x88000000
banner_indicator_space dimension 指示器之间的间距,默认5dp (对RoundLinesIndicator无效)
banner_indicator_gravity dimension 指示器位置,默认center
banner_indicator_margin dimension 指示器的margin,默认5dp,不能和下面的同时使用
banner_indicator_marginLeft dimension 指示器左边的margin
banner_indicator_marginTop dimension 指示器上边的margin
banner_indicator_marginRight dimension 指示器右边的margin
banner_indicator_marginBottom dimension 指示器下边的margin
banner_indicator_height dimension 指示器高度(对CircleIndicator无效)
banner_indicator_radius dimension 指示器圆角(对CircleIndicator无效)
banner_round_top_left boolean 设置要绘制的banner圆角方向(如果都不设置默认全部)
banner_round_top_right boolean 设置要绘制的banner圆角方向(如果都不设置默认全部)
banner_round_bottom_left boolean 设置要绘制的banner圆角方向(如果都不设置默认全部)
banner_round_bottom_right boolean 设置要绘制的banner圆角方向(如果都不设置默认全部)

github官网: GitHub - youth5201314/banner: 🔥🔥🔥Banner 2.0 来了!Android广告图片轮播控件,内部基于ViewPager2实现,Indicator和UI都可以自定义。

到此这篇关于Python Django视图响应三函数详解分析的文章就介绍到这了,更多相关Python Django内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Android实现简单的banner轮播图

    本文实例为大家分享了Android实现简单banner轮播图的具体代码,供大家参考,具体内容如下 说明:想玩一个简单的轮播图效果  用的第三方的框架玩一下,支持设置轮播图多种样式 1.效果图 2.添加依赖 implementation 'com.youth.banner:banner:1.4.10' implementation "com.github.bumptech.glide:glide:4.6.1" 3.主界面 package com.example.myapplication

  • android控件Banner实现简单轮播图效果

    本文实例为大家分享了android控件Banner实现简单轮播图效果的具体代码,供大家参考,具体内容如下 实现这个轮播图是在Fragment里实现的,所以要想实现,首先要创建Fragment 首先是布局文件中的展示 <com.youth.banner.Banner android:id="@+id/banner" android:layout_width="match_parent" android:layout_height="500dp"

  • Android自定义Banner轮播效果

    本文实例为大家分享了Android自定义Banner轮播效果展示的具体代码,供大家参考,具体内容如下 自定义View布局 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content"> <andro

  • Android实现层叠卡片式banner

    本文实例为大家分享了Android实现层叠卡片式banner的具体代码,供大家参考,具体内容如下 效果图如下: 背景 由于公司VIP模块项目需要,本着对ui设计师的尊重,需要实现以上效果图,在网上找了很多博客,都不能满足上面的需求,所以就只能自己硬着头皮自定义了,下面就是我自定义的view代码,做个记录: package cn.com.cunw.familydesk.view.vipBanner; import android.animation.Animator; import android

  • Android自定义图片轮播Banner控件使用解析

    图片轮播控件,可以说是每个App基本上都会用到的.它可以用来动态的展示多个图片,之前写过两篇博客:实现ViewPager无限循环的方式一和实现ViewPager无限循环的方式二,在这两篇博客中,分析了两种实现ViewPager无限循环的原理,但是在使用的过程中,代码的解偶性很低,所以就使用自定义View的方式,实现无限循环的图片轮播的封装. 先看看效果: 功能特点 支持自定义宽高比例 支持自定义图片切换时间 支持自定义指示点的颜色 支持自定义指示点的背景色 支持自定义指示点的高度 支持是否显示指

  • Android BannerView通用封装详解

    之前封装过一个,但总觉得不够优雅,就有了这个通用封装,很简洁,不知道够不够优雅,不过原来那个有跟随指示器和丝滑滑动效果,感兴趣可以看一下. 封装过程 1.自定义属性 selectPoint:选中指示器图标 normalPoint:未选中指示器图标 pointWidth:图标宽度 switchTime:轮播间隔事件 location:指示器位置,下中或下右 <declare-styleable name="NewBannerView"> <attr name="

  • Android自定义封装banner组件

    自定义封装 banner 组件,供大家参考,具体内容如下 1. 效果图预览  2.基本功能 一个简单方便的轮播图组件,基于viewpager 基础上进行的封装. 可设置 项目中图片,网络图片, View: 支持循环自动播放,手势滑动切换,item点击事件,可设置 点点的样式宽高.颜色.大小.位置 : 可设置蒙层:可设置 是否允许滑动:可设置 是否允许循环. 3.基本实现 1). 自定义属性 <declare-styleable name="BannerLayoutStyle"&g

  • android实现banner轮播图无限轮播效果

    本文实例为大家分享了banner轮播图无限轮播效果的具体代码,供大家参考,具体内容如下 效果展示 第一步(权限配置) <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission andr

  • Android banner详解用法案例

    Android----banner使用详解 昨天10.31 ,斗破苍穹的三年之约终于出来了,自己也等了很久很久,敬师长,敬家人,敬朋友,敬每一个前行路上正在奋战的自己,星光不问赶路人,时间不负有心人. 效果图: 添加依赖 implementation 'com.youth.banner:banner:2.1.0' 添加权限到你的 AndroidManifest.xml <!-- if you want to load images from the internet --> <uses-

  • Android动画之TranslateAnimation用法案例详解

    我们在实际的开发过程中,有很多地方需要使用TranslateAnimation,本文是爱站技术频道小编为大家做的简单介绍,下面是详解Android 动画之TranslateAnimation应用的参数说明,希望对你学习这方面知识有帮助! android中提供了4中动画: AlphaAnimation 透明度动画效果 ScaleAnimation 缩放动画效果 TranslateAnimation 位移动画效果 RotateAnimation 旋转动画效果 本节讲解TranslateAnimati

  • Android Git submodule详解用法示例

    目录 引入 创建 submodule 本地配置 代码提交 主项目上的代码提交 submodule独立项目上的代码提交 删除 submodule 引入 假定我们有两个项目:Cup 和 Water,其中 Cup 表示主项目,而 Water 表示子模块项目. 其中 Cup 的远程仓库地址为 git@github.com:SkyMissT/Cup.git 而 Water 的远程仓库地址为 git@github.com:SkyMissT/Water.git 接下来,我们希望在 Cup 中添加 Water

  • Android 文件存储与SharedPreferences存储方式详解用法

    目录 持久化技术简介 文件存储 1. 将数据存储到文件中 2. 从文件中读取数据 SharedPreferences 存储 1. 将数据存储到 SharedPreferences 中 2. 从 SharedPreferences 中读取数据 持久化技术简介 数据持久化就是指将那些内存中的瞬时数据保存到存储设备中,保证即使在手机或计算机关机的情况下,这些数据也不会丢失.保存在内存中的数据是处于瞬时状态的,而保存在存储设备的数据是处于持久状态的.持久化技术提供了一种机制,可以让数据在瞬时状态和持久状

  • Android BaseAdapter适配器详解用法

    目录 ListView和GridView 显示与缓存机制 BaseAdapter 使用演示 布局 ListView 所加条目 创建数据源 JavaBean存放数据 初始化数据源 设置条目的单机和长按事件 创建BaseAdapter及设置缓存 设置适配器 完整主代码 演示 ListView和GridView ListView,列表视图,是Android中最重要的组件之一,几乎每个Android应用中都会使用ListView.是一个以垂直方式在项目中显示View视图的列表. GridView,网格试

  • Android ToggleButton 详解及实例代码

    Android ToggleButton 详解 在Android的开发过程中,对于ToggleButton的使用频率也是相当的高的,下面我就来说一下,这个组件的两种使用方式. 第一种是简单的使用,利用Toast的方式弹出提示语句 需要注意的是要想自定义ToggleButton的显示的内容,就需要设置其TextOn和TextOff的内容. <ToggleButton android:id="@+id/toggleButton1" android:layout_width="

  • Android AsyncTask详解及使用方法

     Android AsyncTask详解及使用方法  简介: AsyncTask就是一个封装过的后台任务类,顾名思义就是异步任务. AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程. 一.如果想自定义一个AsyncTask,可以写一个类,继承AsyncTask. eg: . //第一个参数为doInBackground中传入的类型,第二个为

  • Android CoordinatorLayout详解及实例代码

    Android CoordinatorLayout详解 一.CoordinatorLayout有什么作用 CoordinatorLayout作为"super-powered FrameLayout"基本实现两个功能: 1.作为顶层布局 2.调度协调子布局 CoordinatorLayout使用新的思路通过协调调度子布局的形式实现触摸影响布局的形式产生动画效果.CoordinatorLayout通过设置子View的 Behaviors来调度子View.系统(Support V7)提供了A

  • Android Bitmap详解及Bitmap的内存优化

    Android Bitmap详解及Bitmap的内存优化 一.Bitmap: Bitmap是Android系统中的图像处理的最重要类之一.用它可以获取图像文件信息,进行图像剪切.旋转.缩放等操作,并可以指定格式保存图像文件. 常用方法: public void recycle() // 回收位图占用的内存空间,把位图标记为Dead public final boolean isRecycled() //判断位图内存是否已释放 public final int getWidth() //获取位图的

  • Android requestFocus详解及实例

    Android requestFocus详解及实例 requestFocus的使用 一句话概括: <requestFocus />: 标签用于指定屏幕内的焦点View. 布局资源文件的根节点可以使用容器控件(如LinearLayout.FrameLayout等),也可以使用非容器控件(如:EditText.TextView等).对于非容器控件,只能在非容器控件标签中放<requestFocus />标签,表示将当前控件设为焦点.如下代码: <LinearLayout xmln

随机推荐