Android ScrollView onScrollChanged

标签 android android-scrollview onscrollchanged

我在 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 的生命周期内发生变化,我们需要注册一个OnTouchListenerScrollView得到它的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/

相关文章:

java - 如何从 java 模块中的 gradle.properties 中读取值?

android - 如何扩展 AdapterView 使其表现得像由适配器动态填充的 LinearLayout

android - 嵌套的 RecyclerView 的高度为 “wrap_content”,包含大量项目

android - 无论如何,保持布局的高度作为换行内容,但不要让它超过一定的高度

android - onScrollChanged 在 scrollView 中多次触发滚动结束

android - 未调用 OnScrollChanged 状态

android - HideBottomViewOnScrollBehavior 不适用于回收器 View 项目展开/折叠

java - Android:将 JSONObject 转换为 JSONArray 返回 null

Android 构建因 aapt 内存不足而失败(错误 = 8)

android - 以编程方式获取当前笔画颜色