0

3 本の指が触れたときにアクションを実行する他のすべての下にあるサイトのビューを作成しようとしています。これらのアクティビティにはすべて、独自のタッチとスワイプがあります。

linearlayout を拡張し、タッチをインターセプトするクラスを作成することで、これを機能させることができました。これをxmlに追加します。

ただし、これは、ボタンやビューなどのアイテムがクリック可能またはタッチ可能なサーフェスであり、それ自体がタッチ可能なサーフェスにならない場合にのみ呼び出されます。

public class MyCatcher extends LinearLayout {

@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
    int action = event.getAction();
    switch (action & MotionEvent.ACTION_MASK) {
    case MotionEvent.ACTION_POINTER_DOWN:
        // multitouch!! - touch down
        int count = event.getPointerCount(); // Number of 'fingers' in this
        if (count > 3) {
                doThis(mContext);
        }
    }
    return super.onInterceptTouchEvent(event);
}

そしてxmlで

<packagename.MyCatcher
 ....>
      my normal layout
</packagename.MyCatcher>

したがって、このコードは、タッチ可能なアイテムがタッチされたが、独自のタッチレイヤーにならない場合に機能します。

コンストラクターで setontouchlister を試してみましたが、うまくいきませんでした。

助けてくれてありがとう

追加: onAttach を介して touchlistener を設定すると、タッチをキャッチすることができますが、1 が返されるため、通常のように event.getPointerCount() を使用できません。

4

2 に答える 2

0
onintercepttouchevent()

タッチ イベントが発生するたびにのみ呼び出されます。すなわち; タッチ イベントは、onclicklistener が有効になっているボタン、テキスト ボックスなどのビュー アイテムが押されたときにのみ発生します。あなたの質問では、ビュー全体に onclicklistener を設定する必要があります。

于 2013-03-20T15:15:52.497 に答える
0

レイアウトの代わりに、通常のビューを作成し、それを既存のレイアウトに追加して、画面全体に広がり、他のすべてのビューの「上」に (z オーダーで) 配置されるようにします。これで、他のすべてのビューの前にすべてのタッチ イベントを取得する必要があります。onTouch... の実装では、すべてのタッチ イベントを他のビューに確実に渡す必要があります (ただし、特定の状況でボタンを機能させたくない場合などは、イベントを渡さないでください)。

于 2013-03-20T15:15:55.737 に答える