热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

AndroidListView实现无限循环滚动

这篇文章主要为大家详细介绍了AndroidListView实现无限循环滚动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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

因项目需要循环展示列表数据,所以就实现了这个无限循环滚动的 LIstView.先说一下原理,原理呢,其实很简单,首先将要展示的数据循环展示三遍

监听ListView的滚动事件,当ListView滚动到第一遍第第二个时,ListView变自动跳到第二遍的第二个,同理,如果ListView滚动到倒数第一个时,ListView自动跳转到第二遍的倒数第一个,然后可以不停的向上或者向下滑动,永远不会到头,废话少说,上

代码:

让ListView循环三遍展示

首先利用取余的方法,将List里面的数据循环展示

public class ListAdapter extends BaseAdapter {
 
 private List list;
 private LayoutInflater mInflater;
 
 public ListAdapter(Context context, List list){
 this.list = list;
 this.mInflater = LayoutInflater.from(context);
 }
 /**
 * 将数据循环展示三遍
 */
 @Override
 public int getCount() {
 if(list != null){
  return list.size() * 3;
 }
 return 0;
 }
 
 @Override
 public Object getItem(int arg0) {
 
 return list.get(arg0 % list.size());
 }
 
 @Override
 public long getItemId(int arg0) {
 return arg0 % list.size();
 }
 @Override
 public View getView(int postition, View convertView, ViewGroup arg2) {
 ViewHoler viewHolder = null;
 if(cOnvertView== null){
  viewHolder = new ViewHoler();
  cOnvertView= mInflater.inflate(R.layout.adapter_list_layout, null);
  viewHolder.tvText = (TextView) convertView.findViewById(R.id.adapter_list_layout_tv);
  convertView.setTag(viewHolder);
 }else{
  viewHolder = (ViewHoler) convertView.getTag();
 }
 viewHolder.tvText.setText(list.get(postition % list.size()));//取余展示数据
 return convertView;
 }
 
 static class ViewHoler{
 TextView tvText;
 }
 
}

然后实现监听ListView的滚动事件

public class MainActivity extends Activity implements OnScrollListener {
 
 private ListView listView;
 private List list;
 private ListAdapter adapter;
// private LinearLayout linear;
// 
// private int stopPosition;
// private int firstViewHeight;
 
 
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    listView = (ListView) findViewById(R.id.listView1);
    list = getList();
    adapter = new ListAdapter(this, list);
    listView.setAdapter(adapter);
    listView.setOnScrollListener(this);
    listView.setSelection(list.size());
  }
 
  /**
   * 获取数据
   * @return
   */
  public List getList(){
   List list = new ArrayList();
   for (int i = 0; i <10; i++) {
  list.add(String.valueOf(i));
 }
   return list;
  }
 
 
 @Override
 public void onScrollStateChanged(AbsListView view, int scrollState) {
 
 }
 
 /**
 * 设置滚动监听,当滚动到第二个时,跳到地list.size()+2个,滚动到倒数第二个时,跳到中间第二个,setSelection时,
 * 由于listView滚动并未停止,所以setSelection后会继续滚动,不会出现突然停止的现象
 */
 @Override
 public void onScroll(AbsListView view, int firstVisibleItem,
  int visibleItemCount, int totalItemCount) {
 
 /**到顶部添加数据关键代码*/
 if (firstVisibleItem <= 2) {
  listView.setSelection(list.size() + 2);
 } else if (firstVisibleItem + visibleItemCount > adapter.getCount() - 2) {//到底部添加数据
  listView.setSelection(firstVisibleItem - list.size());
 }
 
 }
  
}

就是这么简单,嘿嘿,表达能力有点欠缺,不知到你看懂没,没看懂的话,后面附上源码:Android无限循环滚动

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


推荐阅读
  • 使用TabActivity实现Android顶部选项卡功能
    本文介绍如何通过继承TabActivity来创建Android应用中的顶部选项卡。通过简单的步骤,您可以轻松地添加多个选项卡,并实现基本的界面切换功能。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • 数据类型--char一、char1.1char占用2个字节char取值范围:【0~65535】char采用unicode编码方式char类型的字面量用单引号括起来char可以存储一 ... [详细]
  • 本文详细介绍了iOS应用的生命周期,包括各个状态及其转换过程中的关键方法调用。 ... [详细]
  • 项目风险管理策略与实践
    本文探讨了项目风险管理的关键环节,包括风险管理规划、风险识别、风险分析(定性和定量)、风险应对策略规划及风险控制。旨在通过系统的方法提升项目成功率,减少不确定因素对项目的影响。 ... [详细]
  • 探索AI智能机器人自动盈利系统的构建
    用户可通过支付198元押金及30元设备维护费租赁AI智能机器人,推荐他人加入可获得相应佣金。随着推荐人数的增加,用户将逐步解锁更高版本,享受更多收益。 ... [详细]
  • 本文将从基础概念入手,详细探讨SpringMVC框架中DispatcherServlet如何通过HandlerMapping进行请求分发,以及其背后的源码实现细节。 ... [详细]
  • Windows操作系统提供了Encrypting File System (EFS)作为内置的数据加密工具,特别适用于对NTFS分区上的文件和文件夹进行加密处理。本文将详细介绍如何使用EFS加密文件夹,以及加密过程中的注意事项。 ... [详细]
  • 回顾两年前春节期间的一个个人项目,该项目原本计划参加竞赛,但最终作为练习项目完成。独自完成了从编码到UI设计的全部工作,尽管代码量不大,但仍有一定的参考价值。本文将详细介绍该项目的背景、功能及技术实现。 ... [详细]
  • 如何在PHP中安装Xdebug扩展
    本文介绍了如何从PECL下载并编译安装Xdebug扩展,以及如何配置PHP和PHPStorm以启用调试功能。 ... [详细]
  • Android与JUnit集成测试实践
    本文探讨了如何在Android项目中集成JUnit进行单元测试,并详细介绍了修改AndroidManifest.xml文件以支持测试的方法。 ... [详细]
  • 本文探讨了在一个物理隔离的环境中构建数据交换平台所面临的挑战,包括但不限于数据加密、传输监控及确保文件交换的安全性和可靠性。同时,作者结合自身项目经验,分享了项目规划、实施过程中的关键决策及其背后的思考。 ... [详细]
  • importjava.io.*;importjava.util.*;publicclass五子棋游戏{staticintm1;staticintn1;staticfinalintS ... [详细]
  • 解决Visual Studio Code中PHP Intelephense误报问题
    PHP作为一种高度灵活的编程语言,其代码结构可能导致Intelephense插件在某些情况下报告不必要的错误或警告。自1.3.3版本起,Intelephense引入了多个配置选项,允许用户根据具体的工作环境和编程风格调整这些诊断信息的显示。 ... [详细]
  • 心理学经典:《思考致富》
    《思考致富》是由美国著名成功学大师拿破仑·希尔撰写的一部重要著作,该书基于希尔长达20年的深入研究和访谈,探讨了个人成功的核心要素。书中不仅揭示了成功的关键,还提供了一系列实用的方法和策略。 ... [详细]
author-avatar
换个风格回复
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有