`
lesterlester
  • 浏览: 3541 次
社区版块
存档分类
最新评论
阅读更多
<div class="iteye-blog-content-contain" style="font-size: 14px">
     关于两个ListView同时滚动的问题,一般人的思维都是在其中一个ListView的onScroll事件中的时候给另个ListView.ScrollTo(x,y)来实现,可是实际上在取另一个ListView的View的getScrollX()或者getScrollY()时,无论怎么取都是0。网站上有通过获得第一个可见的的View的矩形来达到同时滚动的目的,但实际上这种滚动并不是实时同步的,只有在可见的ListViewItem变更了的情况下才会使另一个ListView也同步,而且这个方法仅限于ScorllView和ListView或者其派生类(可能还有些别的,这个我就不清楚了),而我的需求是两个GridView要达到同步。
     简单的说下我的需求,一个电影院选票系统,左侧是行号,右侧是座位,座位可以上下和左右拖动,由于左右拖动的需求,所以独立出行号,为此必须在竖向滚动时保证座位和行号是对应的,且同步。以下是关于这两个gridView同步的一种方法(如果还有其他方法,可以互相交流)。
mGridView.setOnScrollListener(new OnScrollListener() {
            
            @Override
            public void onScrollStateChanged(AbsListView view, int scrollState) {
                
            }
            
            @Override
            public void onScroll(final AbsListView view, int firstVisibleItem,
                    int visibleItemCount, int totalItemCount) {
                    View v = view.getChildAt(view.getFirstVisiblePosition()/20);
                    int[] location = new int[2];
                    if(null!=v){
                        v.getLocationOnScreen(location);
                        mRowGridView.scrollTo(0,view.getFirstVisiblePosition()*40/20-location[1]+1116);
                    }
            }
        });


    其中,mGridView为座位GridView,mRowGridView为行号GridView。
    View v = View.getChildAt(view.getFirstVisiblePosition()/20);
    通过可见的第一个GridViewItem的Position除以它的列数(列数为20),来获得AbsListView的Child下标,从而获得该行的View。
    v.getLocationOnScreen(location);是获得第一行的View在屏幕中的的绝对坐标。这个坐标是用于在滚动而滚动的量还没有达到整整一行时的同步,因为它的值大于0 小于一个Item的高度。
    mRowGridView.scrollTo(0,view.getFirstVisiblePosition()*40/20-location[1]+1116);
    这就是关键的滚动代码了,Y轴,view.getFirstVisiblePosition()*40/20 是为行数滚动了几行,是一个整数,每次mGridView行数Item的高度的整数倍时,mRowGridView的行数也滚动一个Item的高度(其中40是我一个Item的高度dp,20是列数)。 而之后的location[1]+1116是可见的第一行的Item的相对坐标。其中[1]指的是Y轴,+1116呢,是在实机上测出来当没有任何移动时的绝对坐标
     通过整行的和微调的相互合并,达到同步的要求~


</div>
0
1
分享到:
评论

相关推荐

    ios-两表联动.zip

    在iOS开发中,"两表联动"是一种常见的交互设计,特别是在数据展示和用户操作中。这个"ios-两表联动.zip"文件包含了Swift语言实现的两表联动示例代码,可以帮助开发者了解并学习如何在iOS应用中实现这种功能。下面...

    sqlite 多表联动

    当我们需要在应用程序中实现多表联动查询或操作时,SQLite同样能够胜任。"sqlite 多表联动"这个主题主要涉及如何在SQLite数据库中进行关联查询和多表操作,以满足复杂的业务需求。 首先,我们需要理解SQL的JOIN操作...

    省份城市二级联动表

    这种联动表单由两个下拉菜单组成,第一个列出所有省份,用户选择一个省份后,第二个下拉菜单会自动更新为该省份下的城市。这种方式可以有效地减少用户输入错误,提高数据准确性。 描述中提到的“城市省份联动表,...

    数据库中的二级联动 涉及两个表

    在Oracle数据库中,二级联动涉及到两个或多个表之间的关联操作,使得在一个表中的选择能够影响到另一个相关联的表的数据展示。这种联动机制在数据录入和查询时提供了便利,减少了用户输入错误的可能性。 首先,我们...

    消防联动调试记录表(通用).pdf

    1. 任意两个报警触发装置同时动作,消防中心能否接收到信号并发出联动指令。 2. 触发信号可以是不同类型的探测器或手动报警按钮的组合,以模拟各种火灾情况。 3. 同样,声光报警、防排烟风机、防火卷帘门、非消防...

    Android-Recyclerview实现列表联动

    在这个Adapter中,你需要维护两个列表的数据,并在数据改变时通知RecyclerView进行更新。 3. **实现联动逻辑**:在Adapter中,当一个列表的item被点击或者有其他交互时,你需要触发相应的事件,更新其他列表的状态...

    GridView无刷新主从表联动

    在ASP.NET开发中,"GridView无刷新主从表联动"是一种常见的数据展示方式,它能够提升用户体验,使得用户在查看和操作数据时无需等待页面完全刷新。这种技术通常用于显示两个相关联的数据表,其中一个是主表,另一个...

    源码:el-table和Echarts折线图【表-图两者联动】显示tooltip效果【表-图-表三者联动】展示数据

    【Vue入门实践4】el-table和Echarts折线图【表-图两者联动】显示tooltip效果【表-图-表三者联动】展示数据 资源相关文章https://mp.csdn.net/mp_blog/creation/editor/123230346

    android 带表头,左右两个联动的ListView

    然而,有时我们可能需要更复杂的布局,比如带有表头以及左右两个联动的ListView。这种设计常见于需要展示多维度信息或进行筛选操作的场景,如电商应用的商品分类筛选。在本案例中,我们将探讨如何实现这样一个功能。...

    jQuery手机端两级联动城市选择器插件

    "jQuery手机端两级联动城市选择器插件"就是为了解决这一问题而设计的。该插件利用JavaScript库jQuery的高效性和易用性,为手机用户提供了便捷的城市选择体验,特别适用于移动网页或混合应用。 两级联动城市选择器是...

    省市区镇村五级联动数据库表

    这两个文件分别对应了两种常见的关系型数据库管理系统,即SQL Server和MySQL,它们包含了创建五级联动数据库表的SQL语句。 对于SQL Server,其语法可能包含CREATE TABLE语句,用于定义表结构,包括字段名、数据类型...

    世界国家,美国州市联动表带邮编,中英双文

    标题中的“世界国家,美国州市联动表带邮编,中英双文”表明这是一个包含全球国家数据,特别是美国州、市、区的联动表格,并且提供了邮政编码信息,且所有内容都提供了中英文两种语言的版本。这个数据集可能是为了支持...

    省市二级联动数据

    省市二级联动数据

    access 学习经典源代码access 组合框 两级联动

    在标题提到的“access 学习经典源代码access 组合框 两级联动”中,我们讨论的核心是如何实现两个组合框之间的联动效果,即在一个组合框的选择改变时,自动更新另一个组合框的选项。 这种功能常见于多级分类的场景...

    菜单的3级联动access表

    在本主题“菜单的3级联动access表”中,我们将深入探讨如何利用Access设计一个支持三级菜单联动的数据库表结构,以及如何通过ASP(Active Server Pages)进行动态网页开发。 首先,我们需要理解“3级联动”的概念。...

    echarts折线图+饼图双图联动示例

    echarts折线图+饼图双图联动示例

    GridView的联动效果

    在这个实例中,我们有两个表(可能是数据库中的两个表或两个独立的GridView控件)需要实现联动。表1通常是主表,用户在其上进行选择,而表2则作为从表,它的显示内容依赖于表1的选择。当用户在表1中选择一行或某一列...

    消防联动调试记录表(通用)资料.docx

    - 随机选取两个触发装置,消防中心接收报警并发出联动指令。 - 联动触发信号可为不同类型的探测器或手动报警按钮组合。 - 同样涉及声光报警、防排烟风机、防火卷帘门、非消防电源切断、应急照明、电梯迫降和门禁...

    三级联动省市区数据表

    三级联动需要的省市区数据表。

Global site tag (gtag.js) - Google Analytics