<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>
分享到:
相关推荐
在iOS开发中,"两表联动"是一种常见的交互设计,特别是在数据展示和用户操作中。这个"ios-两表联动.zip"文件包含了Swift语言实现的两表联动示例代码,可以帮助开发者了解并学习如何在iOS应用中实现这种功能。下面...
当我们需要在应用程序中实现多表联动查询或操作时,SQLite同样能够胜任。"sqlite 多表联动"这个主题主要涉及如何在SQLite数据库中进行关联查询和多表操作,以满足复杂的业务需求。 首先,我们需要理解SQL的JOIN操作...
在Oracle数据库中,二级联动涉及到两个或多个表之间的关联操作,使得在一个表中的选择能够影响到另一个相关联的表的数据展示。这种联动机制在数据录入和查询时提供了便利,减少了用户输入错误的可能性。 首先,我们...
1. 任意两个报警触发装置同时动作,消防中心能否接收到信号并发出联动指令。 2. 触发信号可以是不同类型的探测器或手动报警按钮的组合,以模拟各种火灾情况。 3. 同样,声光报警、防排烟风机、防火卷帘门、非消防...
在这个Adapter中,你需要维护两个列表的数据,并在数据改变时通知RecyclerView进行更新。 3. **实现联动逻辑**:在Adapter中,当一个列表的item被点击或者有其他交互时,你需要触发相应的事件,更新其他列表的状态...
在ASP.NET开发中,"GridView无刷新主从表联动"是一种常见的数据展示方式,它能够提升用户体验,使得用户在查看和操作数据时无需等待页面完全刷新。这种技术通常用于显示两个相关联的数据表,其中一个是主表,另一个...
【Vue入门实践4】el-table和Echarts折线图【表-图两者联动】显示tooltip效果【表-图-表三者联动】展示数据 资源相关文章https://mp.csdn.net/mp_blog/creation/editor/123230346
然而,有时我们可能需要更复杂的布局,比如带有表头以及左右两个联动的ListView。这种设计常见于需要展示多维度信息或进行筛选操作的场景,如电商应用的商品分类筛选。在本案例中,我们将探讨如何实现这样一个功能。...
"jQuery手机端两级联动城市选择器插件"就是为了解决这一问题而设计的。该插件利用JavaScript库jQuery的高效性和易用性,为手机用户提供了便捷的城市选择体验,特别适用于移动网页或混合应用。 两级联动城市选择器是...
这两个文件分别对应了两种常见的关系型数据库管理系统,即SQL Server和MySQL,它们包含了创建五级联动数据库表的SQL语句。 对于SQL Server,其语法可能包含CREATE TABLE语句,用于定义表结构,包括字段名、数据类型...
标题中的“世界国家,美国州市联动表带邮编,中英双文”表明这是一个包含全球国家数据,特别是美国州、市、区的联动表格,并且提供了邮政编码信息,且所有内容都提供了中英文两种语言的版本。这个数据集可能是为了支持...
省市二级联动数据
在标题提到的“access 学习经典源代码access 组合框 两级联动”中,我们讨论的核心是如何实现两个组合框之间的联动效果,即在一个组合框的选择改变时,自动更新另一个组合框的选项。 这种功能常见于多级分类的场景...
在本主题“菜单的3级联动access表”中,我们将深入探讨如何利用Access设计一个支持三级菜单联动的数据库表结构,以及如何通过ASP(Active Server Pages)进行动态网页开发。 首先,我们需要理解“3级联动”的概念。...
echarts折线图+饼图双图联动示例
在这个实例中,我们有两个表(可能是数据库中的两个表或两个独立的GridView控件)需要实现联动。表1通常是主表,用户在其上进行选择,而表2则作为从表,它的显示内容依赖于表1的选择。当用户在表1中选择一行或某一列...
- 随机选取两个触发装置,消防中心接收报警并发出联动指令。 - 联动触发信号可为不同类型的探测器或手动报警按钮组合。 - 同样涉及声光报警、防排烟风机、防火卷帘门、非消防电源切断、应急照明、电梯迫降和门禁...
三级联动需要的省市区数据表。
"世界国家,城市,地区表用来做三级联动数据"是一个专门为此目的设计的数据资源。这个数据集包含了全球多个国家、城市以及地区的详细信息,支持中日英三种语言,使得其在国际化的应用中更具实用性。 首先,我们来...