1

特定のビューの位置変更をリッスンする必要があります。ビューは、リストビューやリサイクラビューの項目にすることも、スクロールビューやネストされたスクロールビューなどの子にすることもできます。ただし、ビューの画面内の位置が変更されたときはいつでもx、y座標が更新されています)、通知する必要があります。私はビューの移動リスナーを設定する方法

view.setOnScrollChangeListener(new View.OnScrollChangeListener() { 
     @Override 
     public void onScrollChange(View view, int i, int i1, int i2, int i3) { 
      Log.d(TAG, "Position changed"); 
     } 
    }); 

view.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
     @Override 
     public void onGlobalLayout() { 
      Log.d(TAG, "Layout changed"); 
     } 
    }); 

を試してみました。しかし、私はまたGestureDetectorCompatを試してみましたが、情事の間に、X、Y位置は正確ではありません

を動作するようには思えません。

私の問題の解決策はありますか?私の問題がはっきりしていることを願って前もって感謝します!!

+0

実際に達成しようとしていることを教えてください。これは正しい方法ではないようです。 –

+0

基本的に私は2つのビューを持っています。 1つは私のツールバーで、もう1つはツールバーの下にあるアクティビティ(またはフラグメント)のどこにでも置くことができます。この底面図がツールバーに近づくと、ツールバーのテキストと背景の強度を変更する必要があります(ツールバーのタイトルのアルファ値を変更したり、ツールバーの背景色を薄くするなど)。また、ツールバーから離れるときもあります。だから私はいつもこのビューがツールバーからどのくらい先にあるのか知る必要があります。 – Drd

+0

また、このビューは、リストビューのタイトルや通常の線形レイアウトなど、画面内の任意の場所に配置できます。異なる画面に基づいています。私の要件を理解するのに役立ちますか? – Drd

答えて

3

私はあなたがViewTreeObserver.OnScrollChangedListenerコールバックを利用できると思います。これは、ビューツリー内の何かがスクロールされたときに呼び出されるコールバックです。だから、移動しているあなたのビューのためにこのリスナーを追加してみてください。

view.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() { 
     @Override 
     public void onScrollChanged() { 
      // Do what you want to do when the view has been scrolled 
     } 
    }); 
+0

素晴らしい!これはまさに私が望んでいたものです。今私はこのコールバックを使って動きを追跡することができました。ありがとう!! – Drd

関連する問題