私のアプリケーションは、サポート パッケージを利用Fragment
して 2.2 以上の s を実装しています。
ピンチスケーリングイベントを検出するために利用するView
サブクラス(と呼びましょう)があります。これはおなじみの方法で行われます。つまり、 内で、 はを使用して検出器に渡されます。Aは、スケール イベントを受信するために使用されます。ZoomableView
ScaleGestureDetector
onTouchEvent()
MotionEvent
mScaleDetector.onTouchEvent(event)
SimpleOnScaleGestureListener
このクラスは常にa 内ZoomableView
の唯一のものとして表示されます(それを と呼びましょう)。アプリケーション内での使用例は 2 つあります。ある使用例では、レイアウトは のみで構成され、 を含みます。2 番目の使用例では、別の Fragment と一緒に表示されます。この otherはたまたま を格納していますが、 の使用は問題とは関係ありません (その秒に通常の が含まれているだけでも問題は発生します)。View
Fragment
ZoomableFragment
ZoomableFragment
ZoomableView
ZoomableFragment
Fragment
MapView
MapView
Fragment
View
実際の問題は、Jellybean 以前のデバイス (具体的には Froyo 電話) でテストする場合、ツインレイアウトActivity
を示すを使用すると、が機能しないことです。「機能しない」と言うと、デバッガーでs を処理していることがわかりますが、 のメソッドはどれも呼び出されていません。ただし、のみを含むを使用する と、スケール検出は機能します。JellyBean デバイスでアプリケーションを試してみると、ツインの状況はまったく問題なく動作します。つまり、スケール ジェスチャが受信されます。Fragment
ZoomableFragment
ZoomableView
ScaleGestureDetector
MotionEvent
SimpleOnScaleGestureListener
Activity
ZoomableFragment
Fragment
私は周りを検索しましたが、見つけることができる唯一の問題は、人々が実装OnScaleGestureListener
し、 false から false を返すことで動作を妨げている場所onScaleBegin()
です。それはここでは私の問題ではありません。
要約すると、 Froyo (Android 2.2)の複数サポートレイアウトScaleGestureDetector
内で使用する場合、リスナーを呼び出す必要はありません。ICS までを想定しています。ただし、画面上に 1 つしかない場合、検出器は正常に動作します。さらに、私の 4.1 以降の Jellybean デバイスでは、この問題はまったく存在しません。View
Fragment
Fragment
EDIT 1私のツインフラグメントレイアウトでは、ZoomableFragment
向きに応じて常に右または下に配置されています。私が行った興味深い観察は、レイアウトを反転してZoomableFragment
、縦向きの場合は (下のフラグメントではなく) 上に、横向きの場合は左側にあるようにすると、スケール検出器が機能することです! MotionEvent
getRawX()
したがって、これは、フラグメントが使用されている場合の/ getX()
(および Y の場合も同様) メソッドの結果間の関係と関係があると思われます。しかし、このようにレイアウトを反転すると、ピンチズームが隣接する では機能しませんMapView
Fragment
! つまり、要約すると、Froyo では、画面の 0,0 にコーナーがあるaに含まれる aScaleGestureDetector
に対してのみ機能しているようです。View
Fragment
EDIT 2ScaleGestureDetector
grepcodeのソースを調べた後にたどり着いた簡単な解決策で、この質問に自分で答えました。ICS がgetRawX()
/getRawY()
を使用している限り、この質問を更新して、最初に考えた Froyo だけでなく、ICS が影響を受けている (と私は信じています) まで述べました。
編集 3Fragment
アプリケーションで s やその他のものと関係があるものを完全に排除する簡単なテストを行いました。私は単純な Google のMapView
サンプル プロジェクトを使用し、レイアウトを単純に変更して、画面の大部分がTextView
(重み 0.9) で占められ、小さなMapView
ものが下部にわずか 0.1 の重みで収まるようにしました。私のFroyoデバイスでは、ズームをピンチしなくなりました。私のJBデバイスでは、そうです。だから私は気が狂っていないようGestureScaleDetector
で、答えが修正を与えるオンICS以下の問題に遭遇しました(とにかく、確かにFroyoだと思います)。