Android实现轮播图无限循环效果

发布时间 - 2026-01-10 22:59:39    点击率:

本文实例为大家分享了Android轮播图无限循环的具体代码,供大家参考,具体内容如下

实现无限循环

在getCount()方法中,返回一个很大的值,Integer.MAX_VALUE

在instantiateItem()方法中,获取当前View的索引时,进行取于操作,传递进来的int position是个非常大的数,对他进行求余数

在destroyItem()方法中,同样

在onPageSelected()监听方法中,对传递进来的索引进行取于 

反向的无限循环

调用ViewPager对象的setCurrentItem()方法,设置第一次进来时候的当前页,参数:int数字,我们把它定位到Integer.MAX_VALUE的中间,并且保证第一条是当前位置,Integer.MAX_VALUE/2-((Integer.MAX_VALUE/2)%banners.size()) 

目前有个左划空白页的问题没解决

package com.tsh.myviewpager;

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

import android.app.Activity;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

public class MainActivity extends Activity {
  private ViewPager vp_banner;
  private LinearLayout ll_points;
  private TextView tv_title;
  private List<View> banners;
  private String[] titles=new String[]{
      "新闻标题1",
      "新闻标题2",
      "新闻标题3"
  };
  private List<ImageView> points=new ArrayList<ImageView>();
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    // 初始化
    vp_banner = (ViewPager) findViewById(R.id.vp_banner);
    ll_points = (LinearLayout) findViewById(R.id.ll_points);
    tv_title = (TextView) findViewById(R.id.tv_title);
    
    // banner部分
    banners = new ArrayList<>();
    ImageView img1 = new ImageView(this);
    img1.setImageResource(R.drawable.a);
    banners.add(img1);
    ImageView img2 = new ImageView(this);
    img2.setImageResource(R.drawable.b);
    banners.add(img2);
    ImageView img3 = new ImageView(this);
    img3.setImageResource(R.drawable.c);
    banners.add(img3);
    
    //小图标
    ll_points=(LinearLayout) findViewById(R.id.ll_points);
    for(int i=0;i<banners.size();i++){
      ImageView image=new ImageView(this);
      image.setImageResource(R.drawable.point_selector);
      LinearLayout.LayoutParams params=new LinearLayout.LayoutParams(5, 5);
      params.rightMargin=4;
      image.setLayoutParams(params);
      
      if(i==0){
        image.setEnabled(true);
      }else{
        image.setEnabled(false);
      }
      points.add(image);
      ll_points.addView(image);
    }
    
    // 设置适配器
    vp_banner.setAdapter(new MyPagerAdapter());
    vp_banner.setCurrentItem(Integer.MAX_VALUE/2-((Integer.MAX_VALUE/2)%banners.size()));
    vp_banner.setOnPageChangeListener(new OnPageChangeListener() {
      @Override
      public void onPageSelected(int arg0) {
        tv_title.setText(titles[arg0%banners.size()]);
        //小图标处理
        for(ImageView point:points){
          point.setEnabled(false);
        }
        points.get(arg0%banners.size()).setEnabled(true);
      }
      
      @Override
      public void onPageScrolled(int arg0, float arg1, int arg2) {
        // TODO Auto-generated method stub
        
      }
      
      @Override
      public void onPageScrollStateChanged(int arg0) {
        // TODO Auto-generated method stub
        
      }
    });
    
  }

  private class MyPagerAdapter extends PagerAdapter {
    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
      System.out.println("销毁:"+position);
      container.removeView((View)object);
      object=null;
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
      System.out.println("初始化:"+position);
      position=position%banners.size();
      
      //解决右划出错
      if(banners.get(position).getParent()!=null){
        //container.removeView(banners.get(position));
      }else{
        container.addView(banners.get(position));
      }
      
      return banners.get(position);
    }

    @Override
    public int getCount() {
      return Integer.MAX_VALUE;
    }

    @Override
    public boolean isViewFromObject(View arg0, Object arg1) {
      return arg0 == arg1;
    }
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# Android  # 轮播图  # 无限循环  # Android ViewPager实现轮播图效果  # Android自定义控件实现简单的轮播图控件  # Android自定义控件实现优雅的广告轮播图  # Android实现ViewPage轮播图效果  # Android实现炫酷轮播图效果  # Android实现基于ViewPager的无限循环自动播放带指示器的轮播图CarouselFigur  # 简单实现android轮播图  # Android如何使用RecyclerView打造首页轮播图  # Android开发在轮播图片上加入点击事件的方法  # flutter实现轮播图效果  # 小图标  # 是个  # 有个  # 对他  # 把它  # 第一条  # 大家分享  # 非常大  # 具体内容  # 大家多多  # 空白页  # 当前页  # ArrayList 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】  佛山网站制作系统,佛山企业变更地址网上办理步骤?  html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】  javascript中对象的定义、使用以及对象和原型链操作小结  Android使用GridView实现日历的简单功能  Laravel如何创建和注册中间件_Laravel中间件编写与应用流程  Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】  深入理解Android中的xmlns:tools属性  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)  HTML 中如何正确使用模板变量为元素的 name 属性赋值  为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】  详解Huffman编码算法之Java实现  Laravel模型事件有哪些_Laravel Model Event生命周期详解  浅谈javascript alert和confirm的美化  Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性  如何用AI帮你把自己的生活经历写成一个有趣的故事?  js实现点击每个li节点,都弹出其文本值及修改  Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率  java ZXing生成二维码及条码实例分享  如何在IIS7中新建站点?详细步骤解析  如何在搬瓦工VPS快速搭建网站?  如何在IIS管理器中快速创建并配置网站?  iOS正则表达式验证手机号、邮箱、身份证号等  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  javascript中的数组方法有哪些_如何利用数组方法简化数据处理  Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境  Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理  Python并发异常传播_错误处理解析【教程】  郑州企业网站制作公司,郑州招聘网站有哪些?  javascript读取文本节点方法小结  canvas 画布在主流浏览器中的尺寸限制详细介绍  Claude怎样写约束型提示词_Claude约束提示词写法【教程】  如何使用 jQuery 正确渲染 Instagram 风格的标签列表  如何快速搭建高效可靠的建站解决方案?  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  Laravel如何使用Eloquent进行子查询  b2c电商网站制作流程,b2c水平综合的电商平台?  如何快速完成中国万网建站详细流程?  千库网官网入口推荐 千库网设计创意平台入口  活动邀请函制作网站有哪些,活动邀请函文案?  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  如何用wdcp快速搭建高效网站?  EditPlus中的正则表达式 实战(4)  HTML透明颜色代码怎么让下拉菜单透明_下拉菜单透明背景指南【技巧】  Android利用动画实现背景逐渐变暗  通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】  Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门  大连网站制作公司哪家好一点,大连买房网站哪个好?  详解Android——蓝牙技术 带你实现终端间数据传输  谷歌浏览器下载文件时中断怎么办 Google Chrome下载管理修复