当滚动另一个滚动视图时要并行滚动滚动视图
问题描述:
我已经在相同的布局中创建了两个滚动视图。你可以说一个并行滚动视图。我想手动滚动一个滚动视图,作为响应,另一个滚动视图应该以完全相同的方式滚动。两个视图的滚动长度都是相同的。 对于这两个滚动视图,这应该会发生相同的情况。我为此尝试了一个代码。当滚动另一个滚动视图时要并行滚动滚动视图
horizontalScrollViewB.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
@Override
public void onScrollChanged() {
horizontalScrollViewD.scrollTo(horizontalScrollViewB.getScrollX(), horizontalScrollViewB.getScrollY());
}
});
horizontalScrollViewD.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
@Override
public void onScrollChanged() {
horizontalScrollViewB.scrollTo(horizontalScrollViewD.getScrollX(), horizontalScrollViewD.getScrollY());
}
});
这里发生了什么是第一个“B”滚动视图它工作正常,但对于“D”滚动视图它创造了滚动问题。 我了解问题,但无法获得解决方案。那么当另一个人正在调用“onScrollChangeListener()”时,我应该怎么做以避免他人的呼叫。
答
覆盖HorizontalView类
package com.example.shaby.payshare;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.HorizontalScrollView;
/**
* Created by shaby on 3/7/2017.
*/
public class HorizontalScroll extends HorizontalScrollView {
private ScrollViewListener scrollViewListener = null;
public interface ScrollViewListener {
void onScrollChanged(HorizontalScroll scrollView, int x, int y, int oldx, int oldy);
}
public HorizontalScroll(Context context) {
super(context);
}
public HorizontalScroll(Context context, AttributeSet attrs) {
super(context, attrs);
}
public HorizontalScroll(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public void setScrollViewListener(ScrollViewListener scrollViewListener) {
this.scrollViewListener = scrollViewListener;
}
@Override
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);
}
}
}
在你所需的类实现接口