ええ、私はあなたのレイアウトの複雑さを低減することがあなたを助けることはよく分かりません。あなたのデバイス/エミュレータはどのAPIバージョンで動作していますか?なぜなら、あなたが説明したように、クリック可能なビュー上でスクロールイベントを開始することについて、2.1から2.2への変更が気づいたからです。
私の場合、requestDisallowInterceptTouchEvent()
メソッドを使用してネストスクロールを有効にしています。通常これにより、ScrollViewまたはListView を別のScrollView内に内に配置しても、正しくスクロールできます。ただし、APIレベル8から、「クリック可能」コントロールでタッチイベントが開始された場合、この「ネストされたスクロール」は機能しなくなりました。ああ!なぜそれが起こるのかを正確に判断するためにソースを見ていないが、それはあなたの問題に関連しているように思える。
クリック可能なコントロールがタッチイベントを消費する方法が最近変更されたようで、場合によっては両親に悪影響を及ぼします。私は解決策があるのか疑問だ。
編集:
あなたは「クリック」別の方法を実装したい場合は、それは確かに可能です。私は通常それをお勧めしませんが、あなたのスクロールのパフォーマンスがどれほど悪いのか分かりません。あなた次第。
もしあなたがそれをしたいのであれば、あなたのScrollViewにOnTouchListenerを追加することができますが、それはもっと難しい方法でしょう。 ACTION_UP
イベントをリッスンする必要がありますが、対応するACTION_DOWN
イベントがy方向に遠くにあるtouchSlop
未満の場合のみイベントを消費します(touchSlop
はListView
がスクロールを開始する前にタッチが移動する最小距離です... ViewConfiguration
からこの値を取得します)。イベントを消費するときは、クリック可能なコントロールの位置と比較するために、イベントの座標にとListView.getScrollY()
を追加する必要があります。また、「長いクリック」が必要な場合は、それらを実装するためにさらに多くの作業を行う必要があります。また、タッチイベントのためのものだけです...ユーザーがトラックボールをクリックするためにキーリスナーを追加する必要もあります。
代わりに、OnClickListenerではなくOnTouchListenerを各コントロールに追加できると思います。ソースコードの表示を確認して、クリックがどのように登録されているかを確認します。あなたは "長いクリック"を登録する必要がない場合は、それははるかに簡単になります。次に、ACTION_UP
イベントをクリックして処理することができます。トラックボールのクリックを処理するには、キーリスナーも必要です。
マイナースクロールしゃっくりのための多くの作業のようです。私はそれが本当により深刻な問題であると私は思うよりも、正しく質問を理解していないのだろうか?
スクロールビューを使用する必要がありますか?あなたはリストビューを使用できませんか? – Falmarri
私のレイアウトは複雑すぎる(見た目も使い勝手も良いので単純化できない)。それを行で分割することができても、すべての行にはクリックに個別に対応する必要があります。 – sniurkst
あなたは、1つのジェスチャーがスロー・ビューをスクロールさせ、リスナーが発言することが遅い振る舞いを引き起こすと言っていますか?それは起こってはならないし、それがバグであるならば、 –