前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Android界面运用ConvenientBanner实现轮播功能

Android界面运用ConvenientBanner实现轮播功能

原创
作者头像
小明爱吃火锅
发布于 2024-06-22 07:56:17
发布于 2024-06-22 07:56:17
9980
举报
文章被收录于专栏:小明说Java小明说Java

前言

Android开发中,实现图片轮播(通常称为轮播图或幻灯片)通常不会直接使用一个名为ConvenientBanner的特定库(除非这是一个自定义库或特定于某个项目的组件)。然而,在很多app首页中,都会实现图片轮播,这里介绍一个简单又实用的组件ConvenientBanner,可以轻松实现图片轮播。

本文主要介绍如何使用ConvenientBanner实现Android界面图片轮播,以及一些细节问题。

一:在gradle中加入

使用Glide来处理图片加载,需要在build.gradle文件中添加Glide的依赖项

代码语言:Java
AI代码解释
复制
compile 'com.bigkoo:convenientbanner:2.0.5'

二:主布局文件中加入

在安卓view布局中添加插件,也就是引入ConvenientBanner,定义卡片轮播的位置

代码语言:Java
AI代码解释
复制
 <com.bigkoo.convenientbanner.ConvenientBanner

        xmlns:app="http://schemas.android.com/apk/res-auto"

        android:id="@+id/convenientBanner"

        android:layout\_width="match\_parent"

        android:layout\_height="200dp"

        app:canLoop="true" />

三:MainActivity设置图片轮播

使用第三方库ConvenientBanner在Android应用中实现图片轮播(banner)的一个示例。MainActivity继承自AppCompatActivity并实现了OnItemClickListener接口,用于处理图片项的点击事件。在onCreate方法中,首先设置了布局,然后找到ConvenientBanner控件。接着,通过循环将本地的图片资源ID添加到localImages列表中。之后,设置了ConvenientBanner的页面内容,包括通过CBViewHolderCreator创建的Holder(这里是一个名为LocalImageHolderView的自定义Holder),并将图片列表作为数据源传入。此外,还设置了轮播图的一些属性,如指示器的可见性、自动翻页的时间间隔、翻页指示器的图片以及指示器的对齐方式等。最终,这段代码将实现一个带有本地图片资源、自动翻页以及指示器的图片轮播效果。

代码语言:Java
AI代码解释
复制
package com.example.testconvenientbanner;

import android.content.Context;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.view.View;

import android.widget.ImageView;

import android.widget.Toast;

import com.bigkoo.convenientbanner.ConvenientBanner;

import com.bigkoo.convenientbanner.holder.CBViewHolderCreator;

import com.bigkoo.convenientbanner.holder.Holder;

import com.bigkoo.convenientbanner.listener.OnItemClickListener;

import java.lang.reflect.Field;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity implements OnItemClickListener {

    private ConvenientBanner convenientBanner;

    private ArrayList<Integer> localImages = new ArrayList<Integer>();

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity\_main);

        convenientBanner = (ConvenientBanner) findViewById(R.id.convenientBanner);

        //获取本地的图片,循环播放

        for (int position = 0; position < 4; position++) {

            localImages.add(getResId("ic\_test\_" + position, R.drawable.class));

        }

        //开始自动翻页

        convenientBanner.setPages(new CBViewHolderCreator() {

            @Override

            public Object createHolder() {

                return new LocalImageHolderView();

            }

        },localImages)

                //设置指示器是否可见

                .setPointViewVisible(true)

                //设置自动切换(同时设置了切换时间间隔)

                .startTurning(2000)

                //设置两个点图片作为翻页指示器,不设置则没有指示器,可以根据自己需求自行配合自己的指示器,不需要圆点指示器可用不设

                .setPageIndicator(new int[]{R.drawable.ic\_page\_indicator, R.drawable.ic\_page\_indicator\_focused})

                //设置指示器的方向(左、中、右)

                .setPageIndicatorAlign(ConvenientBanner.PageIndicatorAlign.ALIGN\_PARENT\_RIGHT)

                //设置点击监听事件

                .setOnItemClickListener(this)

                //设置手动影响(设置了该项无法手动切换)

                .setManualPageable(true);

    }

    @Override

    public void onItemClick(int position) {

        Toast.makeText(this, "position:" + position, Toast.LENGTH\_SHORT).show();

    }

    //为了方便改写,来实现复杂布局的切换

    private class LocalImageHolderView implements Holder<Integer> {

        private ImageView imageView;

        @Override

        public View createView(Context context) {

            //你可以通过layout文件来创建,不一定是Image,任何控件都可以进行翻页

            imageView = new ImageView(context);

            imageView.setScaleType(ImageView.ScaleType.FIT\_XY);

            return imageView;

        }

        @Override

        public void UpdateUI(Context context, int position, Integer data) {

            imageView.setImageResource(data);

        }

    }

    /\*\*

     \* 通过文件名获取资源id 例子:getResId("icon", R.drawable.class);

     \*

     \* @param variableName

     \* @param c

     \* @return

     \*/

    public static int getResId(String variableName, Class<?> c) {

        try {

            Field idField = c.getDeclaredField(variableName);

            return idField.getInt(idField);

        } catch (Exception e) {

            e.printStackTrace();

            return -1;

        }

    }

}

***注意***:需要注意的是图片的命名方式,以及图片的大小(太大的话可以通过截图另存),这两种方式都有可能产生异常,可以尝试调试。

图片样式:

测试效果图:

我正在参与2024腾讯技术创作特训营最新征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
HashMap深度解析(一)
高爽
2017/12/28
7930
HashMap深度解析(一)
面试突击17:HashMap除了死循环还有什么问题?
本篇的这个问题是一个开放性问题,HashMap 除了死循环之外,还有其他什么问题?总体来说 HashMap 的所有“问题”,都是因为使用(HashMap)不当才导致的,这些问题大致可以分为两类:
磊哥
2022/05/09
6000
面试突击17:HashMap除了死循环还有什么问题?
HashMap的应用场景、优点与缺点
在许多Java应用程序中,HashMap是一种常见且实用的数据结构,它基于散列表(Hash Table)实现。HashMap提供了快速的插入、查找和删除操作,并且可以存储键值对形式的数据。接下来,我们将通过一个具体业务场景来详细讲解HashMap的应用场景、优点以及存在的一些缺点。
GeekLiHua
2025/01/21
1330
HashMap的这个小“坑”;老司机也容易翻车
昨天一位粉丝朋友和我聊天,说遇到了一个莫名奇妙的问题,让我帮着分析一下;经过他的一轮描述,发现是一个HashMap元素顺序小'坑';但是一不留神,老司机也容易在这里翻车。
一行Java
2022/04/07
2590
HashMap的这个小“坑”;老司机也容易翻车
深入浅出 Map 的实现(HashMap、HashTable、LinkedHashMap、TreeMap)
HashMap、TreeMap、HashTable、LinkedHashMap 共同实现了接口java.util.Map, 都是键值对形式,且map的key不允许重复
执笔记忆的空白
2020/12/25
1.5K0
HashMap源码解读[面试专题](集合相关)
加载因子越大,空间利用率就越高,index冲突的概率越大 加载因子越小(0.2),空间利用度不高,index冲突概率就比较小。 0.75科学计算:统计概率学(柏松分布式统计算法得出),
高大北
2022/06/14
4560
HashMap源码解读[面试专题](集合相关)
LinkedHashMap和hashMap和TreeMap的区别「建议收藏」
HashMap是无序的,当我们希望有顺序地去存储key-value时,就需要使用LinkedHashMap了。
全栈程序员站长
2022/11/15
2.2K0
LinkedHashMap和hashMap和TreeMap的区别「建议收藏」
深入Java源码解析容器类List、Set、Map
本篇文章带你从Java源码深入解析关于Java容器的概念。 前言 本篇文章是Tsy远的投稿,Android群英传刚刚开放投稿,有什么好的建议和意见,还请大家多多和我交流~ 本篇文章是讲解Java的容器类,这些东西在我们平时的开发中用的是非常广泛的,但大家有没有好好的去了解过呢?虽然Android是对Java的进一步封装(SDK),但了解Java,可以让我们更加清楚的了解Android的实现原理,这就和我们去看Framework层的代码是一个道理。而且,这样的文章最大的受益者,实际上就是作者本身,只有自己把这
用户1907613
2018/07/20
1K0
Java中的集合(面试题)
注意: 要做出这道题必须对集合的体系结构非常的熟悉HashMap 本身就是不可排序的,但是该道题偏偏让给HashMap排序,那我们就得想在API中有没有这样的Map结构是有序的, LinkedHashMap, 对的,就是它,它是Map结构,也是链表结构,有序的,更可喜的是他是HashMap的子类,我们返回LinkedHashMap <Integer,User>即可,还符合面向接口(父类编程的思想)。但凡是对集合的操作,我们应该保持一个原则就是能用JDK中的API就有JDK中的API,比如排序算法我们不应该去用冒泡或者选择,而是首先想到用Collections集合工具类。
海拥
2021/08/23
5120
HashMap相关(二)
基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了不同步和允许使用 null 之外, HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 此实现假定哈希函数将元素正确分布在各桶之间,可为基本操作(get 和 put)提供稳定的性能。迭代集合视图所需的时间与 HashMap 实例的 “容量”(桶的数量)及其大小(键-值映射关系数)的和成比例。所以,如果迭代性能很重要,
用户1112962
2018/07/04
4850
聊聊java中的哪些Map:(四)LinkedHashMap源码分析
在前面对LinkedList进行分析的时候说到,LinkedList实际上性能比ArrayList不会高多少,只有在前向插入的时候才能比ArrayList性能高。因为LinkedList虽然在remove和insert的操作不需要数据拷贝,但是寻址需要时间,也就是说此从链表中找到需要操作的节点需要时间,只能根据链表挨个遍历。那么当时就在想,查询链表中的某一个元素能不能将O(n)的时间复杂度变为O(1)呢,那样就能充分利用链表的特点。实际上我们本章讨论的LinkedHashMap就是这样一个数据结构。其综合了HashMap和链表的优点,虽然数据结构比LinkedList更加复杂,每一个节点Entry都增加了很多指针,但是在某些场景下,是可以同时发挥Hashmap和链表的优点的数据结构。
冬天里的懒猫
2020/08/25
4760
聊聊java中的哪些Map:(四)LinkedHashMap源码分析
请简述list,set,map类型的集合的各自特点(简述三种不同的继承方式下)
set接口时Collection接口的一个子接口,是无序的,set中不包含重复的元素,也就是说set中不存在两个这样的元素a1.equals(a2)结果为true。又因为Set接口提供的数据结构是数学意义上的集合概念的抽象,因此他支持对象的添加和删除。
全栈程序员站长
2022/07/28
6080
请简述list,set,map类型的集合的各自特点(简述三种不同的继承方式下)
有序的四字成语_LinkedHashMap
大家好,又见面了,我是你们的朋友全栈君。 HashMap是无序的,HashMap在put的时候是根据key的hashcode进行hash然后放入对应的地方。所以在按照一定顺序put进HashMap中,然后遍历出HashMap的顺序跟put的顺序不同(除非在put的时候key已经按照hashcode排序号了,这种几率非常小) 单纯的HashMap是无法实现排序的,这的排序是指,我们将键值对按照一定的顺序put进HashMap里,然后在进行取键值对的操作的时候,是按照put进去的顺序把键值对取出来的。
全栈程序员站长
2022/11/09
2950
Java HashMap详解及实现原理
Java HashMap是Java集合框架中最常用的实现Map接口的数据结构,它使用哈希表实现,允许null作为键和值,可以存储不同类型的键值对。HashMap提供了高效的存取方法,并且是非线程安全的。在Java中,HashMap被广泛应用于各种场景,如缓存、数据库连接池、路由器等。
程序猿川子
2025/02/17
1760
Java HashMap详解及实现原理
Java之集合初探(一)
一、集合概述、区别 集合是一种容器,数组也是一种容器 在Java编程中,装各种各样的对象(引用类型)的叫做容器。 为什么出现集合类? 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,Java就提供了集合类。 数组和集合类同是容器,有何不同? A:长度区别   数组的长度固定   集合长度可变 B:内容不同   数组存储的是同一种类型的元素   而集合可以存储不同类型的元素 C:元素的数据类型问题   数组可以存储基本数据类型,也可以存储引用数据类型   集合只能存储引用类型 集合类
二十三年蝉
2018/02/27
1K0
Java之集合初探(一)
深入浅出的分析 Set集合
原文链接:https://blog.csdn.net/javageektech/article/details/103077788
chenchenchen
2019/11/26
5340
JavaSE学习总结(七)—— 集合
一、为什么需要集合 如果要将100个学生成绩存放到程序中,怎么做? 首先想到是数组 int[] scores=new int[100]; 然而,长度是固定的,比如是101个学生成绩,这个数组就不能用了
张果
2018/01/04
1.2K0
JavaSE学习总结(七)—— 集合
Linkedhashmap源码分析
LInkedHashMap是基于HashMap的,因此如果不太清楚HashMap的实现的话,请先阅读HashMap 源码阅读
呼延十
2019/07/01
3680
Linkedhashmap源码分析
fastjson存在乱序的问题
通常来讲,在使用json数据格式时一般不需要要求数据有序。但凡事都有例外,针对查询时序数据这样一个场景,就必须要求服务器端返回的数据是按时间有序的,否则前端在进行数据展示时就会有问题。 项目架构如下:
编程随笔
2019/09/11
3.2K0
fastjson存在乱序的问题
HashMap按照value排序
给定一个HashMap<String, BuziObj> buziObjMap;,其中 BuziObj 实现了 Comparable 接口。现在需要将 buziObjMap 按照 BuziObj 有序输出。注意,BuziObj 实例有可能相等,要求多次返回的结果一致。可以使用JDK提供的各种API。
崔笑颜
2020/06/08
9640
相关推荐
HashMap深度解析(一)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档