2

GestureDetector.OnGestureListenerAndroidでピンチツーズームを実装するためにを使用しています。TextViewクラスを拡張しているため、メソッドsetTextSize()は既に実装されています。以下は、の私のコードですonScroll()

 @Override
 public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
     if(LOGGING) Log.v(MODULE_NAME, "onScroll()");

     float x, y;
     float oldDist, newDist;

     if (e2.getPointerCount() == 2 && 
         ((e2.getAction() & MotionEvent.ACTION_MASK) == MotionEvent.ACTION_MOVE)) {
         x = e2.getHistoricalX(0, 0) - e2.getHistoricalX(1, 0);
         y = e2.getHistoricalY(0, 0) - e2.getHistoricalY(1, 0);
         oldDist = FloatMath.sqrt(x * x + y * y);
         if (oldDist > 10) {
             if (LOGGING) Log.d(MODULE_NAME, "Starting ZOOM mode");                    
             x = e2.getX(0) - e2.getX(1);
             y = e2.getY(0) - e2.getY(1);
             newDist = FloatMath.sqrt(x * x + y * y);

             if (newDist > 30) {
                    float scaleFactor = (newDist > oldDist) ? oldDist : newDist;
                    float scale = (newDist - oldDist) / scaleFactor;
                    // Callback to be processed in main thread
                    setTextSize(scale * currentTextSize);
                    oldDist = newDist;
             }      
             scrollDetected = true;
             return true;
         }
     }
     return false;            
 }

私の問題は、常にではなく、時々getHistoricalX()例外がスローされることです。LogCatの結果を添付しています。

07-31 16:53:30.358: V/ZoomTextView(19540): onScroll()
07-31 16:53:30.358: E/InputEventReceiver(19540): Exception dispatching input event.
07-31 16:53:30.358: E/MessageQueue-JNI(19540): Exception in MessageQueue callback: handleReceiveCallback
07-31 16:53:30.358: E/MessageQueue-JNI(19540): java.lang.IllegalArgumentException: historyPos out of range
07-31 16:53:30.358: E/MessageQueue-JNI(19540):  at android.view.MotionEvent.nativeGetAxisValue(Native Method)
07-31 16:53:30.358: E/MessageQueue-JNI(19540):  at android.view.MotionEvent.getHistoricalX(MotionEvent.java:2739)

2 つのポインターがあり、履歴のサイズが少なくとも 0 であることはわかっているため、この例外がどのように、またはなぜ発生するのかは明確ではありません。誰でも助けてもらえますか?

この同様の質問を見ましたが、役に立ちませんでした。

4

2 に答える 2