我在 ScrollView 内的 TextView 中有固定内容。当用户滚动到某个位置时,我想启动一个 Activity 或触发一个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>
我的问题是在实现 protected 方法 onScrollChanged
以找出 ScrollView 的位置。
我找到了this答案,有没有更简单的解决方案,而不是声明一个界面,覆盖我发布的链接上的 ScrollView 等?
最佳答案
有一种比继承 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;
}
});
关于Android ScrollView onScrollChanged,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4263053/