我看到你的問題,我自己有很多滾動視圖的麻煩..這裏是我的解決方案來獲取滾動視圖中的scrollvalue(我爲你添加了一個System.out)。
首先創建擴展滾動型的自定義類,並創建一個偵聽器在方法如這裏onScrollChanged:
public class ProductDetailScrollView extends ScrollView {
public interface OnScrollChangedListener {
void onScrollChanged(ScrollView who, int l, int t, int oldl, int oldt);
}
private OnScrollChangedListener mOnScrollChangedListener;
public void setOnScrollChangedListener(OnScrollChangedListener listener) {
mOnScrollChangedListener = listener;
}
@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
super.onScrollChanged(l, t, oldl, oldt);
if (mOnScrollChangedListener != null) {
mOnScrollChangedListener.onScrollChanged(this, l, t, oldl, oldt);
}
}
public ProductDetailHorizontalScrollView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public ProductDetailHorizontalScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public ProductDetailHorizontalScrollView(Context context) {
super(context);
}
}
然後創建一個變量(在活性)mOnScrollChangedListener,並將其設置爲聽者對於mScrollView:
private ProductDetailScrollView.OnScrollChangedListener mOnScrollChangedListener = new ProductDetailScrollView.OnScrollChangedListener() {
public void onScrollChanged(ScrollView who, int l, int t, int oldl, int oldt) {
System.out.println("Scrolled: " + t);
//Parallax Effect on scroll
if (t > 0) {
final float newY = (t/4.0f) * -1.0f;
mProductImageContainer.setY(newY);
} else {
mProductImageContainer.setY(0.0f);
}
}
};
在我的情況下,「T」的值是多少滾動已垂直變化,「L」是橫向滾動,而「oldl」 &「oldt」是的舊值t &升,所以如果你需要知道它的向上或向下滾動,如果(oldt> T)等。
並設置監聽器,你可以使用你的滾動視圖這樣的:
mScrollView.setOnScrollChangedListener(mOnScrollChangedListener);
我面臨完全相同的情況,在我的自定義視圖中,我有一個ViewTreeObserver,我需要檢查getY()的值,就像你的情況一樣,每個第二或第三個值都是正確的。你能指導我嗎?謝謝。 – ShahrozKhan91