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);    }

更多相关文章

  1. ConnectivityManager判断当前用的是什么网络
  2. Android全面屏手机判断NavigationBar是否可见
  3. android 断点续传类
  4. android GestureDetector 手势的判断
  5. android 流布局自动换行和居中
  6. Android(安卓)调用.NET webservice
  7. Android判断当前网络类型是否为5G
  8. Android(安卓)浏览网页
  9. Android(安卓)浅析 ContentProvider (一) 使用

随机推荐

  1. android studio jni路径配置
  2. Android.jar文件分析
  3. Android(安卓)2016年度知名企业公司面试
  4. Android Canvas 画图
  5. android之bundle传递数据--两个activitie
  6. android:省市二级联动下拉框
  7. Android 术语
  8. android的字体相关类Typeface
  9. 个性进度条--------菊花加载----Android
  10. Android AES 文件加密解密