多于ListView同步滚动
简介:
发展过程中可能遇到的2一个或多个其他listview为了用相应的关系保持滚动的情况下一起,本文演示了这种效应为大家。
功效:

实现原理:
在滚动当中不论什么一个ListView的时候,同一时候设置其它ListView的滚动位置。
演示样例中使用的是水平ListView。
HListView的项目托管地址是:https://github.com/sephiroth74/HorizontalVariableListView 有兴趣的能够研究一下
步骤:
1、为了能实现同一时候滚动的情况,有一些条件。首先是HListView的Item的宽度是一一直的,如我设置的
<? xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="60dp"
android:layout_height="60dp"
android:gravity="center"
android:background="#abcdef"
android:text="Terry10" />
2、为了大家仅仅管的感受做法,我将源代码贴出例如以下,大家着重看关键代码就可以:
public class MainActivity extends Activity {
	private HListView mListView1;
	private HListView mListView2;
	private HListView mListView3;
	private HListView mListView4;
	private HListView mListView5;
	private List<HListView> viewList = new ArrayList<HListView>();
	private String[] contentArray = new String[] { "Terry1", "Terry2",
			"Terry3", "Terry4", "Terry5", "Terry6", "Terry7", "Terry8",
			"Terry9", "Terry10", "Terry11", "Terry12", "Terry13", "Terry14",
			"Terry15", "Terry16", "Terry17", "Terry18" };
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		mListView1 = (HListView) findViewById(R.id.listview1);
		mListView2 = (HListView) findViewById(R.id.listview2);
		mListView3 = (HListView) findViewById(R.id.listview3);
		mListView4 = (HListView) findViewById(R.id.listview4);
		mListView5 = (HListView) findViewById(R.id.listview5);
		mListView1.setAdapter(new MyAdapter());
		mListView2.setAdapter(new MyAdapter());
		mListView3.setAdapter(new MyAdapter());
		mListView4.setAdapter(new MyAdapter());
		mListView5.setAdapter(new MyAdapter());
		viewList.add(mListView1);
		viewList.add(mListView2);
		viewList.add(mListView3);
		viewList.add(mListView4);
		viewList.add(mListView5);
		MyScrollListener mListener = new MyScrollListener();
		for (HListView item : viewList) {
			item.setOnScrollListener(mListener);
		}
	}
	private class MyScrollListener implements OnScrollListener {
		@Override
		public void onScrollStateChanged(AbsHListView view, int scrollState) {
			// 关键代码
			if (scrollState == SCROLL_STATE_IDLE
					|| scrollState == SCROLL_STATE_TOUCH_SCROLL) {
				View subView = view.getChildAt(0);
				if (subView != null) {
					final int top = subView.getLeft();
					final int position = view.getFirstVisiblePosition();
					for (HListView item : viewList) {
						item.setSelectionFromLeft(position, top);
					}
				}
			}
		}
		@Override
		public void onScroll(AbsHListView view, int firstVisibleItem,
				int visibleItemCount, int totalItemCount) {
			// 关键代码
			View subView = view.getChildAt(0);
			if (subView != null) {
				final int top = subView.getLeft();
				for (HListView item : viewList) {
					item.setSelectionFromLeft(firstVisibleItem, top);
				}
			}
		}
	}
	private class MyAdapter extends BaseAdapter {
		@Override
		public int getCount() {
			return contentArray.length;
		}
		@Override
		public Object getItem(int position) {
			return contentArray[position];
		}
		@Override
		public long getItemId(int position) {
			return position;
		}
		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			TextView tv = (TextView) getLayoutInflater().inflate(R.layout.item,
					parent, false);
			tv.setText(contentArray[position]);
			return tv;
		}
	}
}
全文完
版权声明:本文博主原创文章,博客,未经同意不得转载。
多于ListView同步滚动的更多相关文章
- Android VLC播放器二次开发3——音乐播放(歌曲列表+歌词同步滚动)
		今天讲一下对VLC播放器音频播放功能进行二次开发,讲解如何改造音乐播放相关功能.最近一直在忙着优化视频解码部分代码,因为我的视频播放器需要在一台主频比较低的机器上跑(800M主频),所以视频解码能力受 ... 
- 支持同步滚动的RichTextbox控件
		using System.Windows.Forms; public class SynchronizedScrollRichTextBox : System.Windows.Forms.RichTe ... 
- Android 实现ListView不可滚动效果
		希望得到的效果是ListView不能滚动,但是最大的问题在与ListView Item还必有点击事件,如果不需要点击事件那就简单了,直接设置ListView.setEnable(false); 如果还 ... 
- Android 设置ListView不可滚动 及在ScrollView中不可滚动的设置
		http://m.blog.csdn.net/blog/yusewuhen/43706169 转载请注明出处: http://blog.csdn.net/androiddevelop/article/ ... 
- C#超简单方法实现两个richtextbox控件滚动条同步滚动
		此文章属于作者原创,转载请注明,谢谢 有时候我们需要实现对照文章等,往往将文本放到两个richtextbox控件中,但是,如果我们需要同步滚动查看,来达到更好的观看效果. 当然,传统的方法重载控件或者 ... 
- android testview + listview 整体滚动刷新
		listview滚动刷新不再讲述怎么实现 因为想实现整体滚动的效果,初始计划scrollView嵌套listview实现. 问题一:scrollview嵌套listview时,listview只能显示 ... 
- WPF学习笔记(5):两个DataGrid的滚动条实现同步滚动
		效果:两个DataGrid的滚动条实现同步滚动. 代码参考了博客园chuncn的文章<.net中同步多个ScrollViewer滚动的四种方法>,原文是针对ListBox的.现改为针对Da ... 
- VS编程,WPF中两个滚动条 ScrollViewer 同步滚动的一种方法
		原文:VS编程,WPF中两个滚动条 ScrollViewer 同步滚动的一种方法 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_43307934/ar ... 
- 数据更新后让ListView自动滚动到底部
		在做聊天界面的时候想要发送新的数据后,listview自动滚动到底部,显示出最新的数据.网上找了两个方法,觉得不错,记录一下. 方法一: 给listview添加下面两个属性 android:stack ... 
随机推荐
- Java EE (9) -- JDBC & JTA
			Connection接口中定义了5中隔离级别常量 Connection.TRANSACTION_NONE -- 不支持事务 Connection.TRANSACTION_READ_UNCOMMIT ... 
- json级联城市
			代码: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> < ... 
- 举例说,在命令模式(Command Pattern)
			在前面加上 谈到命令,大部分的人脑海中会想到以下这幅画面 这在现实生活中是一副讽刺漫画,做决定的人不清楚运行决定的人有何特点,瞎指挥.外行领导内行说的就是这样的.只是在软件设计领域,我们显然要为这 ... 
- C++ 习题 输出日期时间--友元类
			Description 设计一个日期类和时间类,编写display函数用于显示日期和时间.要求:将Time类声明为Date类的友元类,通过Time类中的display函数引用Date类对象的私有数据, ... 
- SQL 编码标准
			1. 你必须从别名表,易于使用的表,该表列 实例 select owner,object_id,name from a,b where a.id=b.id; 假设是不正确的别名表.我知道你是怎么访问表 ... 
- linux、hdfs、hive、hbase经常使用的命令
			linux经常使用命令 pwd 查看当前工作文件夹的绝对路径 cat input.txt 查看input.txt文件的内容 ls 显示当前文件夹下全部的文件及子文件夹 rm recommender-d ... 
- Android MVC MVP
			从.NET的宠物商店到Android MVC MVP 1 一些闲话 记得刚进公司的时候,我们除了做常规的Training Project外,每天还要上课,接受各种技术培训和公司业务介绍.当时第一次 ... 
- [Servlet3.0新功能]注释替代配置文件
			作者信息 作者名称:金云龙 个人网站:http://www.longestory.com 个人公众帐号:搜索"longestory"或"龙哥有话说" 须要注意的 ... 
- U菜1G变化8M该解决方案
			我有一个大小1G纽曼U菜,不幸中毒一年前,格式化后你刚刚离开8M该.然后不再格式正确. 尽管只有8M,但始终我觉得扔了可惜.曾经,它已被搁置.昨天突然心血来潮,我们决定尝试.活马医.想不到最后居然被我 ... 
- JAVA Socket超时浅析(转)
			套接字或插座(socket)是一种软件形式的抽象,用于表达两台机器间一个连接的“终端”.针对一个特定的连接,每台机器上都有一个“套接字”,可以想象它们之间有一条虚拟的“线缆”.JAVA有两个基于数据流 ... 
