一。应用场景
当一个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上下翻页效果
Android提高篇之listView点击button翻页功能实现源码,最近的开发需要在手机上实现列表分页功能,可以设置每页显示的记录数,第一页和最后一页翻页按钮自动置灰。代码中包括RelativeLayout对视图(View)和按钮位置...
Android ListView实现各种版面设计功能 源码
这个下demo是用listview实现了时间轴的功能,该功能非常适合显示物流状态或者是时间记录等,里面附有效果截图,同时代码有也详细的注释,非常容易理解。
android listview嵌套listview实现折叠列表
android 布局中网格视图 ListView的简单运用 采用的是最简单的ArrayAdapter适配器
android listview 下拉刷新 上拉翻页 仿新浪微博客户端 完美的demo
android用Listview实现时间轴的效果
用ListView组件实现树形结构 主界面是继承Activity类 而不像网络上大多数都是继承ListActivity类
Android ListView 实现分批加载
使用实现ListView实现微信好友列表 android ListView 微信 好友列表 自定义ImageView 自定义ListView
实现了 Android listView 分页功能,代码可以运行,功能完善。
通过自定义listView实现表格,动态添加行列
Android listview实现图片的异步加载Demo.zip
左滑删除功能,重写Listview添加SlideView添加左滑按钮,已可以根据实际情况添加别的按钮
Android使用ListView实现时间轴
Android ListView分页功能源码
android studio实现listview的增加,左滑删除 listview以表格样式实现
Android实现ListView的增删改查Demo
android listview 左滑 删除功能 仿IOS系统左滑动删除功能,花了一天时间修改别人的代码实现的自己的需求