ViewpagerBanner

用ViewPager2实现个简单的Banner效果 1、背景 因为要实现的功能比较简单,所以不想用开源库,参考了下开源库,实现一个简单的 2、效果 注:测试用到的图片来源于开眼官方 3、实现 主要依赖ViewPage2,因为ViewPager2已经把大部分功能都写好了,这里只需要把以下两点处理以下就行 显示多个Item(左右留空) 滑动冲突 代码也比较简单(注:水平方向滑动冲突未测试) /** * Description: 一个简单的Banner,只实现左右滑动 * Author : pxq * Date : 2020/9/26 3:47 P 阅读详情

import android.graphics.Bitmap;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import com.hgz.test.viewpagerbannerdemo.utils.ImageLoadTools;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {

    private ArrayList<String> imageAddress;
    private int index = 0;
    private ViewPager viewPager;
    private Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what){
                case 1:
                {
                    //界面切换
                    viewPager.setCurrentItem(index);
                }
                break;
            }
        }
    };


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        viewPager = (ViewPager) findViewById(R.id.viewpager);
        imageAddress = new ArrayList<String>();
        //准备好网络图片地址
        imageAddress.add("http://img.juhe.cn/cookbook/s/1/45_c25e0cedd2012f45.jpg");
        imageAddress.add("http://img.juhe.cn/cookbook/s/1/45_eb68327980f022dd.jpg");
        imageAddress.add("http://img.juhe.cn/cookbook/s/1/45_8e0cf83cb7306281.jpg");
        MyAdapter adapter = new MyAdapter();
        //设置适配器
        viewPager.setAdapter(adapter);
        autoPlay();
    }
    private class MyAdapter extends PagerAdapter {
        @Override
        public int getCount() {
            return Integer.MAX_VALUE;
        }

        @Override
        public boolean isViewFromObject(View view, Object object) {
            return view==object;
        }

        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            container.removeView((View) object);
        }


        @Override
        public Object instantiateItem(ViewGroup container, int position) {

            final ImageView imageView = new ImageView(MainActivity.this);
            new ImageLoadTools(new ImageLoadTools.ImageLoadListeners() {
                @Override
                public void imageLoad(Bitmap bitmap) {
                    if (bitmap!=null){
                        imageView.setImageBitmap(bitmap);
                    }else{
                        imageView.setImageResource(R.mipmap.ic_launcher);
                    }
                }
            }).execute(imageAddress.get(position % imageAddress.size()));
            container.addView(imageView);
            return imageView;
        }
    }
    /**
     * 轮播
     */
    private void autoPlay(){
        new Thread(){
            @Override
            public void run() {
                super.run();
                while(true){
                    try {
                        index++;
                        int index1=index%imageAddress.size();
                        Thread.sleep(3000);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    handler.sendEmptyMessage(1);
                }
            }
        }.start();
    }
}

utils类

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;


public class ImageLoadTools extends AsyncTask<String,Void,Bitmap>{
    private ImageLoadListeners imageLoadListeners;

    public ImageLoadTools(ImageLoadListeners imageLoadListeners) {
        this.imageLoadListeners=imageLoadListeners;
    }

    public interface ImageLoadListeners{
        void imageLoad(Bitmap bitmap);
    }
    @Override
    protected void onPostExecute(Bitmap bitmap) {
        super.onPostExecute(bitmap);
        imageLoadListeners.imageLoad(bitmap);
    }

    @Override
    protected Bitmap doInBackground(String... params) {
        try {
            String param = params[0];
            URL url = new URL(param);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("GET");
            connection.setConnectTimeout(5000);
            connection.setReadTimeout(5000);
            int code = connection.getResponseCode();
            if (code==HttpURLConnection.HTTP_OK){
                InputStream is = connection.getInputStream();
                Bitmap bitmap = BitmapFactory.decodeStream(is);
                return bitmap;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }


}

自定义ViewPager实现Banner 自定义ViewPager实现Banner,知识点包含按下或者滑动的过程中停止轮播 立即下载

相关推荐

使用ViewPager做轮播的banner控件

轮播banner控件,可无限循环自动切换,可设置手动滑动,可设置切换时间间隔,可设置切换动画时长

Compose中的“ViewPager“和Banner

Compose中简单易用的"ViewPager"(ComposePager)和Banner

lt的博客 1665

BannerViewPager

1. 可控的无限循环ViewPager 2. 可控的自定义游标 3. 向ViewPager中任意位置插入Fragment 4. 重写的FragmentpagerAdapter,一定程度上规避了“Can’t change the tag of fragment”这类问题

VIewPager-Banner

效果:(其中之一,可选) 1.依赖 implementation 'com.youth.banner:banner:1.4.9' implementation 'com.github.bumptech.glide:glide:3.7.0' 2.布局 <android.support.constraint.ConstraintLayout xmlns:andro...

钟情短发姑娘的博客 353

手把手教你用ViewPager自定义实现Banner轮播

欢迎大家关注Android开源网络框架NoHttp:https://github.com/yanzhenjie/NoHttp    我们在实际开发中,很多App都会在做一个广告轮播器(可能是图片,可能是其他View),很多同学都是使用别人封装好的或者直接使用ViewPager自己来改,但是有人可能并不理解里面的原理,或者有人遇到了手势滑动冲突。我们今天就用150行代码实现一自定义的广告轮播器并不干扰原来View滑动事件。   本例代码源码及Demo传送门 效果演示 需求分析、解决方案   轮播器最重要的几个特点就是:自动滚动、手动滑动、滚动方向、每个Item显示时间。因此我们设计提供以下

改进差分进化算法及其求解柔性作业车间调度问题(Python代码实现)

内容概要:本文系统探讨了改进差分进化算法在求解柔性作业车间调度问题中的应用,并结合Python代码实现,展示了该算法相较于传统方法在全局搜索能力和收敛速度方面的优势。研究不仅聚焦于算法本身的改进策略,如变异、交叉和选择操作的优化,还深入分析了其在复杂制造环境中应对多目标、多约束调度问题的有效性。文中通过标准测试实例验证了算法性能,并与其他智能优化算法进行了对比分析,体现了其在实际工程应用中的潜力。此外,文档还关联了多无人机路径规划、电力系统状态估计、微电网优化、图像与信号处理等多个前沿技术领域,展现了智能优化算法在跨学科工程仿真与决策支持中的广泛适用性。; 适合人群:具备一定编程基础和工程背景,从事智能制造、自动化、工业工程、电气工程、控制科学与工程、计算机科学及相关领域的科研人员、高校研究生及企业研发技术人员。; 使用场景及目标:①为科研工作者提供可复现的智能优化算法代码框架,支持柔性作业车间调度、多无人机协同路径规划、电力系统优化等复杂工程问题的建模仿真;②辅助完成学术论文复现、课程设计、毕业设计或科研项目开发;③推动智能算法在生产调度、能源管理、交通规划等实际场景中的落地应用。; 阅读建议:建议读者结合文中提供的算法原理与代码实现,动手调试并验证不同参数设置对优化结果的影响,同时可参考荔枝科研社提供的完整资源包进行扩展学习与实践,以加深对算法机制与工程应用的理解。

Viewpager实现 轮播广告栏(BannerPager)

实现这个功能的目前已经有很多种方式了,譬如说继承ViewGroup仿ViewPager通过adapter循环add、dstory指定的item,使用fragment添加移除view的方式,设置viewpager的索引条目达到上限==。以上几种方式属于Banner的常用选择,其中动效做的非常出色的如代码家的ImageSlider,曾经在项目中也引用过,不过在使用的过程中出现了内存开销过大的问题,1张...

云淡风轻的博客 705

Qt数据导出实战:从SQLite到CSV的完整流程(附内存优化技巧)

本文详细介绍了在Qt框架下,将SQLite数据库中的数据高效导出为CSV格式的完整流程。针对大数据量场景,重点分享了分块读取、流式写入等内存优化技巧,有效解决了嵌入式或资源受限环境中导出功能的内存占用与性能瓶颈问题,并提供了健壮的代码实现方案。

weixin_29313547的博客 341

ViewPager打造轮播图(Banner)\引导页(Guide)

ViewPager 轮播图Banner 引导页Guide

asddavid的专栏 2427

基于深度学习的道路裂缝检测识别研究(开题报告)

具体而言,将本研究提出的模型与其他先进的道路裂缝检测算法在相同的数据集上进行对比实验,通过对比实验结果,分析不同算法在准确率、召回率、F1值等指标上的优劣,以及在实际应用中的表现。通过对综述论文的学习了解,对计算机视觉、多模态相关领域的基础进行简要介绍,并在跨模态行人重识别研究领域归纳国内外研究现状和发展趋势,明确当前面临的问题和挑战,并针对当前存在的问题展开后续研究。第二,研究解决该问题的途径和方法。基于深度学习的道路裂缝检测识别研究,旨在通过构建和优化深度学习模型,实现对道路裂缝的自动识别和定位。

毕业作品网站 3826

告别低效!用ADS仿真带你一步步搭建一个两路对称Doherty功放(含设计要点)

本文详细介绍了如何使用ADS仿真工具一步步搭建两路对称Doherty功放,涵盖设计要点与优化技巧。通过解析负载调制机制、阻抗变换等核心原理,结合5G基站等应用场景,帮助工程师提升功放效率与线性度。特别针对GaN管件的Doherty功放,在3.5GHz频段实现高效性能。

weixin_31783001的博客 396

【亲测免费】 BannerViewPager 安装和配置指南

### 项目基础介绍 BannerViewPager 是一个基于 ViewPager2 的 Android 轮播图库。它提供了简单、高效的轮播图实现方式,支持一行代码实现循环轮播、一屏三页任意变、指示器样式任你挑等功能。该项目旨在帮助开发者快速集成轮播图功能到 Android 应用中。 ### 主要编程语言 该项目主要使用 Java 和 Kotlin 两种编程语言。 ## 2. 项目使用的关键...

gitblog_07048的博客 947

【WRF湿度调整策略】WRF/ERA5湿度数据对比

【WRF湿度调整策略】WRF/ERA5湿度数据对比

WW、forever的博客 118

viewpagerbanner

package baway.com.viewpagerbanner; import android.graphics.Bitmap; import android.os.Handler; import android.os.Message; import android.os.SystemClock; import android.support.v4.view.PagerAdapter; im

YueJunFei的博客 592

在 SAP HANA XS Advanced 中用 InA 打通 Web 化分析数据访问:架构原理、部署步骤与实战指南

本文介绍了如何在SAP HANA环境中通过InA协议为XS Advanced应用和分析工具提供实时数据访问。主要内容包括:InA协议的作用是将HANA计算视图等模型通过HTTP(S)暴露为实时数据源;SAP HANA Analytics Adapter(xsahaa)是关键组件,负责协议转换和连接管理;部署包含本地和云端两种形式,均需建立XSA空间与租户数据库的映射;实施前需准备HDI容器、适配器构建和网络验证;安全方面通过XSA用户角色和HDI授权双重控制;文章还提供了与SAP Analytics Clo

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 257

第七天 Labview进阶(7.2 与汇川PLC通信)

运行环境: Labview 2020 Autoshop v4.10.1.1 该文档中包括Labview程序和汇川PLC程序,可以完美实现Labview与汇川PLC的通信。具体的使用教程可以参考本人的相关文章,讲解详尽,请尽情享用!

weixin_38637405的博客 3527

ViewPagerBanner

banner.xml <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match...

weixin_38107457的博客 620

ROS & ROS2 机器人深度相机激光雷达多传感器标定工具箱入门教程(一)

multisensor_calibration 是一个积极维护的通用标定工具箱,用于辅助基于目标的多传感器标定,支持 ROS 1 和 ROS 2。它提供了多种方法和应用来标定复杂的多传感器系统,例如。

2506_90492529的博客 3260

XUI 熟练使用之(二) -----------轮播条( BannerLayout 的使用)

目录前言RecyclerViewBanner 的使用示例常用属性为轮播条设置常用事件轮播到某一项的事件为 item 添加点击事件 前言 在前面的博客中(XUI 熟练使用之(一) ----------- 将 XUI 引入项目)我们已经学习了如何将 XUI 导入到我们的项目中,由于作者发布的示例项目很多地方对于我这样的新手来说,还不太容易理解,其中很多的控件不能做到开箱即用的效果,需要先熟悉一下示例项目结构等。所以接下来的一系列博文,我将一 一分享我的 XUI 学习之旅,已达到大家看了文章立马就会使用 XU.

llk15884975173的博客 2429

华为OD机试真题 新系统 - WIFI设备网络规划 (Java/Py/C/C++/Js/Go)

本文整理华为 OD 机试新系统机考真题库,涵盖高频考点精析与完整题目内容,提供 C 语言、Java、C++、Python、Go、JavaScript 多语言源码实现,搭配详细解题思路讲解,并支持在线 OJ 刷题练习,助力高效备考华为 OD 机试新系统。

算法大师! 2015

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

ViewPager Banner(广告墙)

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33743661的博客 137

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

打造一个轻量级,简单,易用的Android Banner框架

打造一个轻量级,简单,易用的Android Banner框架由于本人在写一个项目(项目地址: https://github.com/xfhy/Daily )的时候,需要用到banner,用于显示首页的轮播图,但是我又不想让项目导入过多的开源框架,于是自己动手撸一个.我设计得很简单,可能该存在很多的不足,欢迎大家批评指正.该框架地址:https://github.com/xfhy/EasyBanner

潇风寒月 6958

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

android轮播引导页,ViewPager打造轮播图Banner/引导页Guide

前言去年7月时,在Github发布了一个开源的Banner库,虽然Star不多,但还是有少部分人使用。Banner效果:昨天,有使用此库的同学提出需求,想在引导页的时候用这个库并且最后一页有进入按钮如何实现,为满足他的需求,也方便更多开发者是快速实现。进行了简单的扩展支持Guide模式的使用。Guide效果图:OK,效果如图所以,咱们此库满足了既可在Banner上使用也可以快速在第一次安装应用的时...

weixin_39632057的博客 334

用ViewPager写一个Banner

Banner没少用,记得第一次用banner的时候,是找一个大神要的一个自定义的banner,就一个java文件,觉得超级厉害;后来又一直用的convenientbanner,觉得这个很不错,就一直用的这个,压根就没想要自己写一个;首先,不造重复的轮子;其次,不会。 今天在鸿洋大神公众号上看到了有人讲用ViewPager写一个Banner,讲了一下思想和简单实现,所以我想着我也试一下呗! 下面的

相公 538
上一篇: XListview(导入第三方module)
下一篇: 图片加载错位
SuperMonsterH
博客等级 码龄9年 11粉丝 60原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SuperMonsterH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值