`
Iam42
  • 浏览: 275248 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

android ListView实现翻页SeekBar功能

 
阅读更多

一。应用场景

    当一个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);
        }
    }

 

  • 大小: 67 KB
1
0
分享到:
评论

相关推荐

    Android ListView上下翻页效果

    综上所述,实现Android ListView的上下翻页效果涉及到了数据加载策略、滚动监听、Adapter的定制以及性能优化等多个方面。通过这些技术,我们可以为用户提供流畅且富有交互性的列表浏览体验。在实际项目中,可以根据...

    Android提高篇之listView点击button翻页功能实现源码

    Android提高篇之listView点击button翻页功能实现源码,最近的开发需要在手机上实现列表分页功能,可以设置每页显示的记录数,第一页和最后一页翻页按钮自动置灰。代码中包括RelativeLayout对视图(View)和按钮位置...

    Android ListView实现各种版面设计功能 源码

    本资源"Android ListView实现各种版面设计功能 源码"聚焦于如何利用ListView实现多样化的版面设计,提升用户界面的视觉效果和交互体验。核心知识点主要包括ListView的基础使用、自定义适配器、Header与Footer的添加...

    android ListView 网格布局

    本文将深入探讨如何在Android中实现一个基于ArrayAdapter的网格布局ListView。 首先,我们要了解ListView的基本结构。ListView是由多个列表项(List Item)组成的,每个列表项通常对应一个View。在Android中,我们...

    Android 重写Listview实现左滑删除功能

    本项目"Android 重写Listview实现左滑删除功能"旨在教你如何在ListView中添加滑动删除的交互效果。 首先,我们需要理解ListView的工作原理。ListView通过复用View(也称为ViewHolder模式)来优化性能,减少内存消耗...

    android listview 下拉刷新 上拉翻页 仿新浪微博客户端

    本篇文章将深入探讨如何在Android中实现ListView的下拉刷新和上拉翻页功能,仿照新浪微博客户端的交互体验。 首先,下拉刷新通常指的是用户在ListView顶部向下滑动时,触发数据的更新加载。这种功能可以实现在用户...

    Android应用源码ListView上下翻页效果-IT计算机-毕业设计.zip

    本项目是针对“Android应用源码ListView上下翻页效果”的一个毕业设计示例,旨在帮助开发者学习如何在Android应用中实现ListView的上下翻页效果,以及相关的移动开发技巧。 在Android中,ListView通过Adapter来绑定...

    android ListView实现树形结构

    在Android开发中,ListView是一种常用的UI控件,用于展示大量数据列表。然而,要实现一个树形结构,即节点有层级关系的数据展示,就需要进行一些定制化的工作。本篇文章将详细探讨如何在不继承`ListActivity`而是...

    Android应用源码ListView上下翻页效果.zip

    在Android应用开发中,ListView是常用的控件之一,它用于展示大量的数据列表,通常用于实现类似通讯录、消息列表等功能。本压缩包“Android应用源码ListView上下翻页效果.zip”提供了一个关于ListView上下翻页效果的...

    Android ListView实现下拉加载功能

    本篇文章将详细介绍如何在Android中实现ListView的下拉加载功能。 首先,我们创建一个自定义的ListView,名为`MyListView`,继承自原生的ListView,并实现`OnScrollListener`接口。这个接口包含了一个方法`...

    Android ListView 下拉刷新、上拉加载

    在ListView中,我们可以通过监听ListView的OnScrollListener来实现这一功能。当用户滚动到底部时,加载更多数据。首先,我们需要定义一个变量记录是否正在加载更多数据,然后在滚动监听器中判断: ```java ListView...

    android ListView实现表格

    本教程将详细介绍如何通过自定义ListView来实现一个功能丰富的表格,包括动态添加行列。 首先,我们需要理解ListView的基本工作原理。ListView通过Adapter来绑定数据源,每一项(row)由一个ListView的子View(item...

    android listview嵌套listview实现折叠列表

    为了实现这个功能,我们需要在父ListView的Adapter中为每个条目创建一个包含子ListView的布局。 步骤1:创建父ListView的Adapter。在这个Adapter中,我们需要处理点击事件,以便在点击父列表项时展开或折叠对应的子...

    ListView上下翻页效果.rar

    为了实现翻页效果,开发者需要对这个过程进行定制,特别是在ListView的滚动事件中添加适当的动画。 在源码中,可能会包含以下关键部分: 1. **Adapter**:这是连接ListView与数据源的桥梁。你需要自定义一个...

    android listview 实现左滑删除置顶

    以上就是实现“Android ListView左滑删除和置顶”功能的主要技术点和步骤。通过理解ListView的工作机制和适当地利用Android提供的组件和API,开发者可以创建出具有丰富交互特性的列表界面。在实际项目中,可能还需要...

    Android实现ListView的增删改查Demo

    这个"Android实现ListView的增删改查Demo"是一个实战教程,旨在教你如何在Android应用中实现对ListView中的数据进行添加、删除、修改和查询操作。这个Demo通常会结合SQLite数据库来存储和管理数据,因为SQLite是...

    Android ListView 实现分批加载

    本文将深入探讨如何在Android中实现ListView的分批加载功能。 一、分批加载原理 分批加载的基本思想是只加载用户当前可视范围内的数据,当用户滚动到列表底部时,再加载下一批数据。这样可以显著减少内存占用,并...

    Android listview自动换行

    在本篇中,我们将深入探讨如何在Android中为ListView实现自动换行的功能。 首先,我们需要理解ListView的工作原理。ListView通过复用视图(ViewHolder)来提高性能,当用户滚动时,它会重新使用已经滑出屏幕的视图...

    android listview 固定表头,固定前几列

    这里我们将深入探讨如何在Android中实现"ListView固定表头,固定前几列"的功能。 首先,我们来看表头的固定。表头固定通常是通过自定义ViewGroup来实现的。创建一个新的布局文件,比如`fixed_header.xml`,作为表头...

    android的listview嵌套listview,列表嵌套列表 android studio版本

    总结来说,实现Android的ListView嵌套ListView需要理解ListView的工作机制,创建并管理两个Adapter,以及在布局文件中正确地嵌套ListView。这虽然不是特别高深的技术,但却是Android开发中常见的需求,熟练掌握能...

Global site tag (gtag.js) - Google Analytics