Ang*_*elo 8 android event-handling scrollview
我对这个问题感到疯狂,从现在开始4个小时就深入挖掘它,我想我再也无法集中注意力了,如果这是一个简单的话,那就很抱歉.
基本上我想跟踪Scrollview上的ScrollY(不,我不能使用网格或列表)
我正在使用带有onScrollChanges侦听器的ViewTreeObserver.但是,它被多次激活.更糟糕的是:当它被调用4次中的3次时,scrollview的scrollY为0并且1次我得到正确的数量.然而,这并不像每4个电话是正确的,那一刻时会触发正确的值是随机的,我需要能够听的scrollPosition 0.
这是我用来观察我的Scrollview的代码:
mScrollView.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
@Override
public void onScrollChanged() {
Log.d("StupidScrollView", "Scroll positionY: " + mScrollView.getScrollY());
}
});
Run Code Online (Sandbox Code Playgroud)
样本输出:
D/StupidScrollView? Scroll positionY: 0
D/StupidScrollView? Scroll positionY: 0
D/StupidScrollView? Scroll positionY: 0
D/StupidScrollView? Scroll positionY: 77
Run Code Online (Sandbox Code Playgroud)
我必须提一下,我在ViewPager中,我的片段包含需要观察的Scrollview.它听起来像是与此相关的一些问题.
提前致谢!
我看到了你的问题,我自己在使用scrollviews时遇到了很多麻烦.这是我在scrollview中获取scrollvalue的解决方案(我为你添加了一个System.out).
首先创建一个扩展ScrollView的自定义类,并创建一个具有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);
}
}
Run Code Online (Sandbox Code Playgroud)
然后我创建一个变量(在活动中)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);
}
}
};
Run Code Online (Sandbox Code Playgroud)
在我的情况下,"t"值是滚动垂直变化多少,"l"是水平滚动,"oldl"和"oldt"是t&l的旧值,所以如果你需要知道它向上或向下滚动你可以使用if(oldt> t)等.
并在滚动视图中设置监听器,如下所示:
mScrollView.setOnScrollChangedListener(mOnScrollChangedListener);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7795 次 |
| 最近记录: |