2013-08-21 3 views
10

私の考えは、2つのsurfaceViewを持つことです。 1つのsurfaceViewは、画像(例えばImageSurgaceView)を保持し、第2のサーフェスは円、矩形などのアノテーション(AnnotationSurfaceView)を保持する最初のものの上に横たわっています。次に、これらのサーフェスビューをマップして、両者は同じであり、さらに、両方の表面図がドラッグで移動する、すなわちタッチイベントを共有する必要があります。正確には、画像を上に移動すると注釈も上に移動する必要があります。Android:互いの上に2つのサーフェイスビューを持つことは可能ですか?

今、アンドロイドでこれが可能かどうかはわかりません。誰かがこれに関する情報を伝えたり、共有したりすることができます。私はこれに実装の考えを持っていないので、私は特定のコードを持っていません。さらに、私は似たものを見つけることができませんでした。

ありがとうございます。

答えて

20

はい、可能です。 FrameLayoutの子としてSurfaceViewを両方とも追加できます。 SufaceViewのいずれかまたは両方でsetZOrderMediaOverlayに電話をかけて、レイヤーの仕方を指定することもできます。

さらに、これはあなたが記述しているグラフィックの集中アルゴリズムかもしれません。 AndroidManifest.xmlアプリケーション属性android:hardwareAccelerated="true"を追加することを検討してください。

最後に、ドラッグイベントを処理するカスタムOnTouchListenerを設定します。タッチポイントを取得するにはMotionEvent.getRawX()MotionEvent.getRawY()を使用し、これを使用してキャンバスを操作します。

+0

サーフェイスビューを両方ともframelayoutに追加できません。つまり、別の子を追加する前に** removeView()**を呼び出す必要があります。また、** android:HardwareEnabled = "true" **を設定している間に、**エラー: 'android'パッケージ**の 'HardwareEnabled'属性のリソース識別子が見つかりませんでした。 – Shobhit

+0

@Shobhit、属性は私が修正したタイプミスでした。 'android:hardwareAccelerated =" true "'を試してください。あなたの最初の問題については、代わりに 'ScrollView'を使用しているようです。あなたのレイアウト( 'XML'またはプログラム的)を質問に追加できますか? – Phil

+0

ちょっとPhil、小さなバグがありましたが、今ではそれを部分的にしか使えませんでした。カスタムOnTouchListenerを実装する必要があります。万が一、サンプルコードへのリンクがありますか?はいの場合、共有していただけますか?私は私の答えとして現在のコードを掲示するでしょう。ありがとう! :) – Shobhit

関連する問題