0

これが私が達成しようとしていることの要約です。私には、MotionEventをリッスンしているビューがあります。特定の条件に一致したら、スクロールするために、そのMotionEventをGridViewに渡します。私は次のようなことをしています

if (event.getAction() == MotionEvent.ACTION_MOVE) {
    if (condition match) {
        getGridView().dispatchTouchEvent(event);
    }
}

ただし、MotionEventに従ってグリッドがスクロールすることはありません。そのようなイベントをリッスンしていないのかもしれませんが、「ScrollEvent」がないのでわかりません。

誰かがそれについて私に教えてもらえますか?ドキュメントが役に立たなかった。ありがとうございました。

4

2 に答える 2

0

モーションイベントを処理するには、ビューはその動きに関連するイベントの完全なセットを取得する必要があります。

たとえば、スクロールはで始まりMotionEvent.ACTION_DOWN、その後にいくつかMotionEvent.ACTION_MOVEあり、最後に。で終わる必要がありMotionEvent.ACTION_UPます。これらのイベントの1つをディスパッチするだけでは不十分です。ビューがスクロールの動きをデコードできるようにするには、フルセットをディスパッチする必要があります。

よろしく。

于 2012-12-12T17:55:08.407 に答える
0

ルイスは、グリッドビューがスクロールしない理由を説明しました。実際、そのようなディスパッチは正しくありません。ビューAのモーションイベントをビューBに渡したいとのことですが、モーションのxとyはビューに相対的であり、別のビューで直接使用することはできません。ViewGroup.dispatchTouchEvent()のソースコードを調べてみてください。ViewGroupは、子にディスパッチされる前にモーションを変換します。ビューBがビューAの子である場合は、ディスパッチメカニズムを変更する代わりに、onInterceptTouchEvent()を使用してモーションをインターセプトする必要があります。

于 2012-12-12T18:09:06.933 に答える