昨天开发,遇到一个棘手的问题,就是需要多个ScroollView能达到联动的效果,不是把view放到一个ScrollView就能解决的,需要将view拆分到不同的ScrooView中,然后对某个ScrollView操作,实现两个或者多个ScrollView同时滚动,给人的感觉是在一个ScrollView上的效果一样的!!
例如图上效果:
第一排是能自由左右移动的ScrollView,第二行是自由移动的ScrollView,但是呢 需求是移动第二个ScrollView需要我们同时第一个ScrollView同步移动!怎么做呢,上代码:
第一:写个接口ScrollViewListener!!
public interface ScrollViewListener {
void onScrollChanged(MyScrollView scrollView, int x, int y, int oldx, int oldy);
}
第二:
重写 HorizontalScrollview(或者ScrollView)
public class MyScrollView extends HorizontalScrollViewrollView {
private ScrollViewListener scrollViewListener = null;
public MyScrollView(Context context) {
super(context);
}
public MyScrollView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public MyScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public void setScrollViewListener(ScrollViewListener scrollViewListener) {
this.scrollViewListener = scrollViewListener;
}
protected void onScrollChanged(int x, int y, int oldx, int oldy) {
super.onScrollChanged(x, y, oldx, oldy);
if (scrollViewListener != null) {
scrollViewListener.onScrollChanged(this, x, y, oldx, oldy);
}
}
}
第三步:
某个Activity 实现接口,并实现onScrollChanged方法,
public class TestActivity implements ScrollViewListener
实例化你的Scrollview , 然后 注册监听器:
myscrollview = (MyScrollView) findViewById(R.id.scrollview_score_vertical);
myscrollview.setScrollViewListener(this);
接口方法实现:
public void onScrollChanged(MyScrollView scrollView, int x, int y,
int oldx, int oldy) {
if (scrollView == myscrollview ) {
myscrollview .scrollTo(x, y); // 这里是拖动myscrollview 实现scrollview滚动
你的scrollview(或者listivew).scrollTo(x, y);// 这里写 需要跟myscrollview同步滚动的scrollview或者listview即可!
}
}
这样你的listview或者scrollview就能同步滚动了!!