2012-01-11 9 views
7

スプリットタッチイベントを取得しようとしています。これは、複数のビューでタッチ入力を個別に検出できることを意味します。スプリットモーションイベント - 複数のビューへの入力を同時に受け入れる

ハニーコムに追加された機能で、互換性ライブラリを使用してバックポートすることができます。 ここに詳細があります:http://developer.android.com/sdk/android-3.0.html - >「スプリットタッチイベント」

までスクロールは、基本的にはこう述べています。以前は を、単一のビューでは、一度にタッチイベントを受け入れることができます。 Android 3.0では、ビューやウィンドウまでタッチイベントを分割できるため、さまざまなビューで同時にタッチイベントを受け付けることができます。 Android 3.0を対象とするアプリケーションの場合、タッチイベントの分割はデフォルトで有効になっています。つまり、アプリケーションがandroid:minSdkVersionまたはandroid:targetSdkVersion属性の値を「11」に設定した場合。 2 imageviewsトップ1が下ながら、「ポインタ」のタグでLog.eイベントを生成触れ、あるプロジェクトで https://sites.google.com/site/droidbean/hologramlwp/downloadmodels/attachments/SplitMotionTest.rar?attredirects=0&d=1

:ここ

は、私はそれをテストするために使用していますサンプルプロジェクトでありますビューは 'ポインタ2'を生成しますが、トップビューをタッチすると分かりますが、別のフィンガーで2番目のビュー(別々のビューに触れています)はジンジャーブレッドの最初のビューからのメッセージのみを生成します。

ハニカムで同じプロジェクトを実行すると、正しく動作し、両方のビューでそれぞれの 'ポインタ'ログエントリが生成されます。

私の質問になると、ジンジャーブレッドやその他の安いアンドロイド版を実行している電話機でも同じ効果が得られますか?

+0

あなたは、すべてのタッチイベントをキャプチャするために、 'onInterceptTouch'を使用してみましたし、その後のビューにそれらを派遣しましたか? – JiTHiN

答えて

1

ジンジャーブレッドはタッチイベントの分割をサポートしていないため、2つのビューにオーバーレイを作成する方法があります。例えば空のRelativeLayoutをxmlの他のビューの後に追加するか、または2つのビューをカバーするコードでオーバーレイと呼ぶことにしましょう。オーバーレイのOnTouchListenerを設定し、イベントが発生したビュー(x、y)をプログラムで決定します。次に、決定されたビューのonTouchEventにイベントを送信します。

これはそれほどフレンドリーではありません。そのため、彼らはそれを修正しました。

例:

public boolean onTouch(View v, MotionEvent event) 
    { 
     if(view1.hitTest(event)) 
     { 
      return view1.onTouchEvent(event); 
     } else if(view2.hitTest(event)) 
     { 
      return view2.onTouchEvent(event); 
     } 
     return false; 
    } 
+0

ありがとう、これは私が使用しなければならなかった方法です。 – behelit

関連する問題