Ste*_*teD 23 android android-scrollview onscrollchanged
我在滚动视图中的文本视图中有一个固定的内容.当用户滚动到某个位置时,我想开始一个活动或触发一个Toast.
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:id="@+id/scroller">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView android:layout_width="fill_parent" android:id="@+id/story"
android:layout_height="wrap_content" android:text="@string/lorem"
android:gravity="fill" />
</LinearLayout>
</ScrollView>
Run Code Online (Sandbox Code Playgroud)
我的问题是实现受保护的方法onScrollChanged来找出滚动视图的位置.
我找到了这个答案,是否有一个更简单的解决方案,而不是声明一个界面,覆盖滚动视图等,如我发布的链接上所示?
Shu*_*uri 48
有一种比子类化更简单的方法ScrollView.该ViewTreeObserver对象ScrollView可用于侦听滚动.
由于ViewTreeObserver对象可能的寿命期间改变ScrollView,我们需要注册一个OnTouchListener就ScrollView拿到它ViewTreeObserver的滚动时间.
final ViewTreeObserver.OnScrollChangedListener onScrollChangedListener = new
ViewTreeObserver.OnScrollChangedListener() {
@Override
public void onScrollChanged() {
//do stuff here
}
};
final ScrollView scrollView = (ScrollView) findViewById(R.id.scroller);
scrollView.setOnTouchListener(new View.OnTouchListener() {
private ViewTreeObserver observer;
@Override
public boolean onTouch(View v, MotionEvent event) {
if (observer == null) {
observer = scrollView.getViewTreeObserver();
observer.addOnScrollChangedListener(onScrollChangedListener);
}
else if (!observer.isAlive()) {
observer.removeOnScrollChangedListener(onScrollChangedListener);
observer = scrollView.getViewTreeObserver();
observer.addOnScrollChangedListener(onScrollChangedListener);
}
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
Com*_*ish 13
没有.
ScrollView不提供滚动事件的监听器,甚至不提供检查用户滚动距离的方法,因此您必须执行链接建议的操作.
这个问题相当陈旧,但万一有人匆匆离开(像我一样):
与开始API 23,Android的View拥有OnScrollChangeListener和匹配二传手.
支持库中的NestedScrollView还支持在该API级别之前设置滚动侦听器.据我所知,NestedScrollView可以用来替代正常ScrollView而没有任何问题.
实际上有一种方法可以知道用户滚动了多远.ScrollView中的方法getScrollY()告诉你.
| 归档时间: |
|
| 查看次数: |
70473 次 |
| 最近记录: |