- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我想在 Scrollview 上跟踪 ScrollY(不,我不能使用网格或列表)
我正在使用带有 onScrollChanges 监听器的 ViewTreeObserver。但是,它会被多次触发。更糟糕的是:当它被调用 4 次中的 3 次时, ScrollView 的 scrollY 是 0 和 1 次我得到正确的数量。然而,并不是每 4 次调用都是正确的,触发正确值的时刻是随机的,我需要能够听到滚动位置 0。
这是我用来观察我的 ScrollView 的代码:
mScrollView.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
@Override
public void onScrollChanged() {
Log.d("StupidScrollView", "Scroll positionY: " + mScrollView.getScrollY());
}
});
示例输出:
D/StupidScrollView﹕ Scroll positionY: 0
D/StupidScrollView﹕ Scroll positionY: 0
D/StupidScrollView﹕ Scroll positionY: 0
D/StupidScrollView﹕ Scroll positionY: 77
我不得不提一下,我在一个 ViewPager 中,我的 fragment 包含一个需要观察的 Scrollview。不知何故,这听起来像是与此相关的问题。
最佳答案
我看到了你的问题,我自己在 ScrollView 方面遇到了很多麻烦。这是我在 ScrollView 中获取滚动值的解决方案(我为你添加了一个 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);
}
}
然后我创建一个变量(在 Activity 中)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 和 l 的旧值,所以如果你需要要知道它向上或向下滚动,您可以使用 if(oldt > t) 等。
然后你像这样在你的 ScrollView 中设置监听器:
mScrollView.setOnScrollChangedListener(mOnScrollChangedListener);
关于多次触发 Scrollview 的 Android onScrollChanged,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24826319/
我正在开发一个具有 ScrollView 的 Android 应用程序。我已经从 ScrollView 覆盖了我的 View 并实现了 onScrollChanged 方法。当 scrollview
我在 ScrollView 内的 TextView 中有固定内容。当用户滚动到某个位置时,我想启动一个 Activity 或触发一个Toast。 我的问题是在实现 protected
我有一个实现 OnScrollListener 的 ArrayAdapter。 OnScroll 方法被多次调用,大多数时候不止一次。现在永远不会调用 OnScrollChangedState,我完全
我创建了一个扩展 ListView 的类,这样我就可以重写 onScrollChanged,这样我就可以判断列表是向上滚动还是向下滚动。然而每次它被调用时,所有的值都是 0。 对常规 ScrollVi
这里是 protected void View.onScrollChanged(int l, int t, int oldl, int oldt) 的来源: /** * This is called
我想在 Scrollview 上跟踪 ScrollY(不,我不能使用网格或列表) 我正在使用带有 onScrollChanges 监听器的 ViewTreeObserver。但是,它会被多次触发。更糟
我已经实现了一个监听器类来检测引用链接 https://gist.github.com/marteinn/9427072 的 ScrollView 的结尾 public class Responsiv
我有一个带有 webview 和按钮的布局。该按钮是可见的,但一旦滚动 web View 就会变得可见。我正在使用 ViewTreeObserver,但由于某种原因,未调用 onScrollChang
我在屏幕上工作,其中有 scrollview,其中包含 4 个 view,并且我有四个选项卡代表该部分。最初 view1 tab 在我滚动 view2 时处于 Activity 状态 visible
我有一个 GridView 可以显示您图库中的图片。当用户滚动列表时,有关图像的详细信息从左侧动画显示。我在为 GridView 项目定义自定义布局的类中实现了这一点。它扩展了 LinearLayou
在 Xamarin Android 中,我们如何扩展 ScrollView 以使用 protected OnScrollChanged 事件? 具体来说,我们如何扩展 ScrollView 以允许将
我正在尝试实现以下效果: 我有一个自定义的 ScrollView(为了获得 onScrollChanged 监听器)和一个自定义 View 。在自定义 View 中,我成功地放置了我想要的项目。 这里
我有一个 ScrollView,它的唯一子元素是 RelativeLayout。最近我注意到这个方法: @Override protected void onScrollChanged(int l,
谷歌开发团队的人能解释一下如何避免在 pre-ics 设备上发生这种崩溃吗?在我的例子中,ListView 项目上的 ImageButton 是 PopupWindow 的 anchor ,用于创建下
我是一名优秀的程序员,十分优秀!