分享一个两个Android scrollView同时滚动的方法
来源:互联网 发布:永乐大帝 知乎 编辑:程序博客网 时间:2024/06/05 21:57
public interface ScrollNotifier { public void setScrollListener(ScrollListener scrollListener); public ScrollListener getScrollListener();}public interface ScrollListener { void onScrollChanged(View syncedScrollView, int l, int t, int oldl, int oldt);} public class SyncedScrollView extends ScrollView implements ScrollNotifier { //... private ScrollListener scrollListener = null; @Override protected void onScrollChanged(int l, int t, int oldl, int oldt) { super.onScrollChanged(l, t, oldl, oldt); if (scrollListener != null) scrollListener.onScrollChanged(this, l, t, oldl, oldt); } @Override public void setScrollListener(ScrollListener scrollListener) { this.scrollListener = scrollListener; } @Override public ScrollListener getScrollListener() { return scrollListener; } }**最关键的是在下面创建一个Manager,判断scroll滚动**public class ScrollManager implements ScrollListener { private static final int SCROLL_HORIZONTAL = 1; private static final int SCROLL_VERTICAL = 2; private ArrayList clients = new ArrayList(4); private volatile boolean isSyncing = false; private int scrollType = SCROLL_HORIZONTAL; public void addScrollClient(ScrollNotifier client) { clients.add(client); client.setScrollListener(this); } // TODO fix dependency on all views being of equal horizontal/ vertical // dimensions @Override public void onScrollChanged(View sender, int l, int t, int oldl, int oldt) { // avoid notifications while scroll bars are being synchronized if (isSyncing) return; isSyncing = true; // remember scroll type if (l != oldl) scrollType = SCROLL_HORIZONTAL; else if (t != oldt) scrollType = SCROLL_VERTICAL; else { // not sure why this should happen isSyncing = false; return; } // update clients for (ScrollNotifier client : clients) { View view = (View) client; // don't update sender if (view == sender) continue; // scroll relevant views only // TODO Add support for horizontal ListViews - currently weird things happen when ListView is being scrolled horizontally //这里判断了是否是scrollView、HorizontalScrollView、ListView,所以想要ListView或者HorizontalScrollView同时滚动亦可如此;方法类似 if ((scrollType == SCROLL_HORIZONTAL && view instanceof HorizontalScrollView) || (scrollType == SCROLL_VERTICAL && view instanceof ScrollView) || (scrollType == SCROLL_VERTICAL && view instanceof ListView)) view.scrollTo(l, t); } isSyncing = false; }}最后在activity里调用的方法如下 private void setupScrolling() { SyncedScrollView view; ScrollManager scrollManager = new ScrollManager(); // timeline horizontal scroller view = (SyncedScrollView) findViewById(R.id.epgtimeline_container); scrollManager.addScrollClient(view); // services vertical scroller view = (SyncedScrollView) findViewById(R.id.epgservices_container); scrollManager.addScrollClient(view); // content area scrollers view = (SyncedScrollView) findViewById(R.id.epgevents_container_inner); scrollManager.addScrollClient(view); view = (SyncedScrollView) findViewById(R.id.epgevents_container_outer); scrollManager.addScrollClient(view); }
0 0
- 分享一个两个Android scrollView同时滚动的方法
- Android实现两个ScrollView互相联动,同步滚动的效果
- Android实现两个ScrollView同步滚动的效果
- Android实现两个以上ScrollView同步滚动
- Android之重写ScrollView实现两个ScrollView的同步滚动显示
- Android之重写ScrollView实现两个ScrollView的同步滚动显示
- 一个有两秒轮询滚动的scrollView
- 当一个控制器中有两个scrollview,可以在不用多线程的条件下同时执行
- Android 设置listview在scrollView中不滚动的方法
- Android textview 不使用ScrollView也可滚动的方法
- Android 用ScrollView和HorizontalScrollView同时实现上下、左右滚动
- Android ScrollView的滚动事件
- 重写ScrollView实现两个ScrollView的同步滚动显示
- 重写ScrollView实现两个ScrollView的同步滚动显示
- 重写ScrollView实现两个ScrollView的同步滚动显示
- 重写ScrollView实现两个ScrollView的同步滚动显示
- 两个scrollView捆绑滚动
- 一个JBOSS同时发布两个应用的两种方法
- 基于灰度的分割
- 电子商务模式
- DNS解析过程
- HDU杭电5533 Dancing Stars on Me
- 51Nod 算法马拉松7 B选数字
- 分享一个两个Android scrollView同时滚动的方法
- redis
- 最小公倍数题(Problem ID:1108)
- iOS中 WGAFN_网络监控 技术分享
- 炒股十二年总结深度长文 看完后股民都在反思
- HDOJ-3339-In Action【dijkstra & 01背包】
- 一个基本Python类
- 黑马程序员——OC基础---手动内存管理
- 面试温馨提示,一二三