一。应用场景
当一个ListView中有很多条目(Item)时,为了方便浏览需要需要实现分页功能,目前常见的分页方法有下拉刷新,但是这种分页方法翻页速度太慢,例如某个论坛的帖子有10000条回复,如果用户想查看第9999条,就不得不下拉刷新很多次。于是我们实现了一个可以横向拉动的翻页器。
二。最终效果
拖动过程中上端显示当前页数,左下显示页码,右下按钮点击后隐藏这个SeekBar, 这个SeekBar的升起与隐藏有动画效果。
三。实现
1。前端布局:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout android:id="@id/footBar" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_margin="@dimen/meduim_padding" android:visibility="invisible"> <TextView android:id="@id/overlayTips" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:background="@drawable/overlay_tip_normal" android:gravity="center" android:paddingLeft="@dimen/side_margin" android:paddingRight="@dimen/side_margin" android:paddingTop="@dimen/meduim_padding" android:paddingBottom="@dimen/meduim_padding" android:textColor="@color/shadow" android:textSize="@dimen/primary_text_size" android:layout_above="@id/seekbar" android:visibility="invisible"/> <RelativeLayout android:layout_below="@id/overlayTips" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="@dimen/meduim_padding" android:paddingBottom="@dimen/side_margin" android:paddingTop="@dimen/side_margin" android:background="@drawable/radius_corners_background"> <SeekBar android:id="@id/seekbar" android:layout_width="fill_parent" android:layout_height="wrap_content" android:thumbOffset="2dp"/> <RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@id/seekbar" android:layout_marginTop="5dp" > <ImageView android:id="@id/p_retract" android:src="@drawable/p_retract" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="@dimen/side_margin" android:layout_marginBottom="@dimen/side_margin" android:layout_alignParentRight="true" android:scaleType="fitCenter"/> <TextView android:id="@id/current_page" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="@dimen/side_margin" android:layout_marginBottom="@dimen/side_margin" style="@style/Text.Secondary" /> </RelativeLayout> </RelativeLayout> </RelativeLayout>
2.后端代码
首先要监听SeekBar的滑动事件,根据滑动到的位置,算出现在在第几页. 方法:seekBar.getProgress()得到的是当前滑动的位置(0-100的数字),seekBar.getMax()得到100,有这两个值就可以根据比例算出当前seekbar的位置所对应的页数了。
然后 onStopTrackingTouch这个callback在seekbar停止滑动的时候触发,这时候我们在onPageChanged方法中实现讲listView中的内容替换成当前页对应的内容。
mSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int i, boolean b) { mCurrentPageNum = seekBar.getProgress() / (seekBar.getMax() / mTotalPageNum) + 1; if (mCurrentPageNum > mTotalPageNum) { mCurrentPageNum = mTotalPageNum; } mCurrentPage.setText(String.valueOf(mCurrentPageNum) + "/" + String.valueOf(mTotalPageNum)); String currentPageString = String.format(getString(R.string.page), mCurrentPageNum); if (mOverlayTips != null) { mOverlayTips.setVisibility(View.VISIBLE); mOverlayTips.setText(currentPageString); } } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { seekBar.setProgress((mCurrentPageNum - 1) * (seekBar.getMax() / mTotalPageNum)); onPageChanged(mCurrentPageNum); if (mOverlayTips != null) mOverlayTips.setVisibility(View.INVISIBLE); } });
private void onPageChanged(int page) { int index = page - 1; if (page != mTopicFragment.getCurrentIndex()) { mTopicFragment.getPageContent(index); mPageIndex.setText(mCurrentPageNum + "/" + mTotalPageNum); mTopicFragment.initHeaderView(index); } }
相关推荐
综上所述,实现Android ListView的上下翻页效果涉及到了数据加载策略、滚动监听、Adapter的定制以及性能优化等多个方面。通过这些技术,我们可以为用户提供流畅且富有交互性的列表浏览体验。在实际项目中,可以根据...
Android提高篇之listView点击button翻页功能实现源码,最近的开发需要在手机上实现列表分页功能,可以设置每页显示的记录数,第一页和最后一页翻页按钮自动置灰。代码中包括RelativeLayout对视图(View)和按钮位置...
本资源"Android ListView实现各种版面设计功能 源码"聚焦于如何利用ListView实现多样化的版面设计,提升用户界面的视觉效果和交互体验。核心知识点主要包括ListView的基础使用、自定义适配器、Header与Footer的添加...
本文将深入探讨如何在Android中实现一个基于ArrayAdapter的网格布局ListView。 首先,我们要了解ListView的基本结构。ListView是由多个列表项(List Item)组成的,每个列表项通常对应一个View。在Android中,我们...
本项目"Android 重写Listview实现左滑删除功能"旨在教你如何在ListView中添加滑动删除的交互效果。 首先,我们需要理解ListView的工作原理。ListView通过复用View(也称为ViewHolder模式)来优化性能,减少内存消耗...
本篇文章将深入探讨如何在Android中实现ListView的下拉刷新和上拉翻页功能,仿照新浪微博客户端的交互体验。 首先,下拉刷新通常指的是用户在ListView顶部向下滑动时,触发数据的更新加载。这种功能可以实现在用户...
本项目是针对“Android应用源码ListView上下翻页效果”的一个毕业设计示例,旨在帮助开发者学习如何在Android应用中实现ListView的上下翻页效果,以及相关的移动开发技巧。 在Android中,ListView通过Adapter来绑定...
在Android开发中,ListView是一种常用的UI控件,用于展示大量数据列表。然而,要实现一个树形结构,即节点有层级关系的数据展示,就需要进行一些定制化的工作。本篇文章将详细探讨如何在不继承`ListActivity`而是...
在Android应用开发中,ListView是常用的控件之一,它用于展示大量的数据列表,通常用于实现类似通讯录、消息列表等功能。本压缩包“Android应用源码ListView上下翻页效果.zip”提供了一个关于ListView上下翻页效果的...
在ListView中,我们可以通过监听ListView的OnScrollListener来实现这一功能。当用户滚动到底部时,加载更多数据。首先,我们需要定义一个变量记录是否正在加载更多数据,然后在滚动监听器中判断: ```java ListView...
本教程将详细介绍如何通过自定义ListView来实现一个功能丰富的表格,包括动态添加行列。 首先,我们需要理解ListView的基本工作原理。ListView通过Adapter来绑定数据源,每一项(row)由一个ListView的子View(item...
为了实现这个功能,我们需要在父ListView的Adapter中为每个条目创建一个包含子ListView的布局。 步骤1:创建父ListView的Adapter。在这个Adapter中,我们需要处理点击事件,以便在点击父列表项时展开或折叠对应的子...
为了实现翻页效果,开发者需要对这个过程进行定制,特别是在ListView的滚动事件中添加适当的动画。 在源码中,可能会包含以下关键部分: 1. **Adapter**:这是连接ListView与数据源的桥梁。你需要自定义一个...
在本篇中,我们将深入探讨如何在Android中为ListView实现自动换行的功能。 首先,我们需要理解ListView的工作原理。ListView通过复用视图(ViewHolder)来提高性能,当用户滚动时,它会重新使用已经滑出屏幕的视图...
以上就是实现“Android ListView左滑删除和置顶”功能的主要技术点和步骤。通过理解ListView的工作机制和适当地利用Android提供的组件和API,开发者可以创建出具有丰富交互特性的列表界面。在实际项目中,可能还需要...
这个"Android实现ListView的增删改查Demo"是一个实战教程,旨在教你如何在Android应用中实现对ListView中的数据进行添加、删除、修改和查询操作。这个Demo通常会结合SQLite数据库来存储和管理数据,因为SQLite是...
本文将深入探讨如何在Android中实现ListView的分批加载功能。 一、分批加载原理 分批加载的基本思想是只加载用户当前可视范围内的数据,当用户滚动到列表底部时,再加载下一批数据。这样可以显著减少内存占用,并...
这里我们将深入探讨如何在Android中实现"ListView固定表头,固定前几列"的功能。 首先,我们来看表头的固定。表头固定通常是通过自定义ViewGroup来实现的。创建一个新的布局文件,比如`fixed_header.xml`,作为表头...
而EditText则是用户输入文本的控件,结合ListView可以实现批量录入的功能,比如在列表的每一项中添加一个可编辑的文本框,让用户一次性处理多个数据。在这个场景下,自定义键盘的使用则增加了用户体验,避免了频繁...
总结来说,实现Android的ListView嵌套ListView需要理解ListView的工作机制,创建并管理两个Adapter,以及在布局文件中正确地嵌套ListView。这虽然不是特别高深的技术,但却是Android开发中常见的需求,熟练掌握能...