大佬教程收集整理的这篇文章主要介绍了android – 同步两个ScrollView,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
目标:
当我触摸拖动其中一个ScrollView时,另一个ScrollView必须滚动尽可能多.例如,如果我在左侧ScrollView上有一个名称列表,并且右侧ScrollView中有相应的电话号码,则滚动一个ScrollView不应该破坏名称和电话号码之间的原始界限.
可以通过onTouchEvent实现吗?如果是这样,我应该如何实现它(在两个或一个ScrollView上)?
请帮帮我安卓大师!
>滚动ScrollViews并覆盖其onScrollChanged事件以在滚动更改时更新ScrollManager:
public interface ScrollNotifier { public void setScrollListener(ScrollListener scrollListener); public ScrollListener getScrollListener(); } 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,oldt); } @Override public void setScrollListener(ScrollListener scrollListener) { this.scrollListener = scrollListener; } @Override public ScrollListener getScrollListener() { return scrollListener; } }
>创建一个ScrollManager类,用于协调多个参与者的滚动
public interface ScrollListener { void onScrollChanged(View syncedScrollView,int l,int oldt); } public class ScrollManager implements ScrollListener { private static final int SCROLL_HORIZONTAL = 1; private static final int SCROLL_VERTICAL = 2; private ArrayList<ScrollNotifier> clients = new ArrayList<ScrollNotifier>(4); private volatile Boolean isSyncing = false; privat@R_675_9473@ 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 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 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; } }
>创建自定义ScrollViews并在两者上设置ScrollManager以进行通知
private void setupScrolling() { ScrollNotifier view; ScrollManager scrollManager = new ScrollManager(); // timeline horizontal scroller view = (ScrollNotifier) findViewById(R.id.epgtimeline_container); scrollManager.addScrollClient(view); // services vertical scroller view = (ScrollNotifier) findViewById(R.id.epgservices_container); scrollManager.addScrollClient(view); // content area scrollers view = (ScrollNotifier) findViewById(R.id.epgevents_container_inner); scrollManager.addScrollClient(view); view = (ScrollNotifier) findViewById(R.id.epgevents_container_outer); scrollManager.addScrollClient(view); }
以上是大佬教程为你收集整理的android – 同步两个ScrollView全部内容,希望文章能够帮你解决android – 同步两个ScrollView所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。