25

スクロール ビュー内のテキスト ビューに固定コンテンツがあります。ユーザーが特定の位置にスクロールすると、アクティビティを開始するか、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>

私の問題は、保護されたメソッドを実装しonScrollChangedてスクロール ビューの位置を見つけることです。

私はこの答えを見つけました。投稿したリンクに見られるように、インターフェイスを宣言したり、スクロールビューをオーバーライドしたりするよりも、これに対する簡単な解決策はありますか?

4

11 に答える 11

15

いいえ。

ScrollView は、スクロール イベントのリスナーや、ユーザーがどれだけスクロールしたかを確認する方法さえ提供しないため、リンクで提案されていることを実行する必要があります。

于 2010-11-24T03:46:38.987 に答える
10

この質問はかなり古いものですが、誰かが立ち寄った場合に備えて (私のように):

API 23以降、AndroidViewにはOnScrollChangeListener対応する setterがあります。

サポート ライブラリのNestedScrollViewは、その API レベルの前でもスクロール リスナーの設定もサポートしています。私が知る限りNestedScrollView、ノーマルの代替品としてScrollView問題なく使用できます。

于 2016-04-18T15:16:35.853 に答える
8

実際に、ユーザーがどこまでスクロールしたかを知る方法があります。ScrollView のメソッド getScrollY() がそれを教えてくれます。

于 2012-04-16T10:58:34.260 に答える
2

scrollView を拡張しました。このリンクが役立つ場合があります。

class MyScroll extends ScrollView {
    boolean onTop=true;
    @Override
    protected void onScrollChanged(int l, int t, int oldl, int oldt) {
        //Log.d(TAG, "scroll changed: " + this.getTop() + " "+t);
        if(t <= 0){
            onTop = true;
            //Log.d(TAG, "scroll top: " + t);
            super.onScrollChanged(l, t, oldl, oldt);
            return;
            // reaches the top end
        }
        onTop = false;

        View view = (View) getChildAt(getChildCount()-1);
        int diff = (view.getBottom()-(getHeight()+getScrollY()+view.getTop()));// Calculate the scrolldiff
        if( diff <= 0 ){
            // if diff is zero, then the bottom has been reached
        }
        super.onScrollChanged(l, t, oldl, oldt);
    }
}
于 2016-04-18T15:39:33.473 に答える