2017-07-21 9 views
-1

ダブルタップではない私のアプリのサポートピンチズームを作成する必要がありますが、:私はこれは私が私のonTouchListenerのために作られたコードである

if(event.getAction() == MotionEvent.ACTION_UP) { 
       Log.i("", "double touch : " + timeLastTouch + "... time passed: " + (System.currentTimeMillis() - timeLastTouch)); 
       if (System.currentTimeMillis() - timeLastTouch < 500) { 
        Log.i("", "double touch TRUE"); 
        timeLastTouch = System.currentTimeMillis(); 
        return true; 
       } else { 
        Log.i("", "double touch FALSE"); 
        timeLastTouch = System.currentTimeMillis(); 
        return false; 
       } 
      }else if(event.getAction() == MotionEvent.ACTION_DOWN) { 
       Log.i("", "double touch DOWN : " + timeLastTouch + "... time passed: " + (System.currentTimeMillis() - timeLastTouch)); 
       if (System.currentTimeMillis() - timeLastTouch < 500) { 
        Log.i("", "double touch TRUE DOWN"); 
        timeLastTouch = System.currentTimeMillis(); 
        return true; 
       }else { 
        Log.i("", "double touch FALSE DOWN"); 
        return false; 
       } 
      }else { 
       timeLastTouch = System.currentTimeMillis(); 
       Log.i("","double touch ELSE FALSE"); 
       return false; 
      } 

しかし、それは動作しません。 このビューはサーフェスビュー上にあります。今度はイベントをSurfaceViewに送ってピンチ(ピンチでズーム)する必要があります これでロジックを作成しようとしましたので、ダブルタッチの場合はtrueを返します(タッチを消費しています。表示、タッチを取得しません)。 しかし、これを行うと、ズームのピンチがうまくいきません。 このロジックを削除してピンチズームが機能するので、いくつかのログを追加して、それに従ってください。ピンチズームの場合、ACTION_MOVEが呼び出された後で2つのダウンイベントが発生することに気付きました。恐らく、ピンチでズームすると、2本の指を置いてからズームします。私の問題は、2番目のAction_downがタッチを消費するために、私のコードがそれを設定していたことです。つまり、ズームのピンチが開始しないことを意味します。どのようにこれを修正するためのideeas?

+0

[既存のピンチインプリメンテーション](https://android-arsenal.com/search?q=pinch)を見て、それらがどのように機能しているかを確認することができます。 – CommonsWare

+0

さて、私はピンチロジックを実装する必要はありません。それはすでに存在します。私の見解の下にあるビューに。私が望むのは、ダブルタップのために私の視点が消費されますが、ピンチのためではありません。 (event.actionのログ記録)は、ダブルタップの場合0 0 1(action_down、action_down、action_up)を返し、0 0 2/1(action_down、action_down、moveまたはup)を返します。それで私の問題。原因2番目のAction_downイベントをブロックしても、ピンチズームは得られません。私がそれをブロックしなければ、それは次のビューに送られているので、それは起きてはいけません。 –

+0

したがって、「移動」のMotionEventが呼び出される前にピンチズームが発生したときを知るロジックが必要です。私はevent.getIndexCounter()を使用して試してみましたか、マルチタッチであるかどうかを確認しましたが、 –

答えて

0

私は、次のロジックで、これを行うために管理しなかった:

viewTop.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      Log.i("","double touch event action: ==========================="); 
      Log.i("","double touch event action:" + event.getAction()); 
      if(event.getAction() == MotionEvent.ACTION_DOWN) { 
       Log.i("", "double touch DOWN : " + timeLastTouch + "... time passed: " + (System.currentTimeMillis() - timeLastTouch) + "..... location diff: " + (event.getX() - xLastTouch)); 
       if (System.currentTimeMillis() - timeLastTouch < 1000 && Math.abs(event.getX() - xLastTouch) < 150 && Math.abs(event.getY() - yLastTouch) < 150) { 
        Log.i("", "double touch TRUE DOWN"); 
        timeLastTouch = System.currentTimeMillis(); 
        xLastTouch = event.getX(); 
        yLastTouch = event.getY(); 
        return true; 
       } else { 
        timeLastTouch = System.currentTimeMillis(); 
        xLastTouch = event.getX(); 
        yLastTouch = event.getY(); 
        Log.i("", "double touch FALSE DOWN"); 
        return false; 
       } 
      }else if(event.getAction() == MotionEvent.ACTION_UP) { 
       timeLastTouch = System.currentTimeMillis(); 
       xLastTouch = -1f; 
       yLastTouch = -1f; 
       return false; 
      }else { 
       timeLastTouch = System.currentTimeMillis(); 
       xLastTouch = event.getX(); 
       yLastTouch = event.getY(); 
       Log.i("","double touch ELSE FALSE"); 
       return false; 
      } 
     } 
    }); 

しかし、私はタップを倍増し、第2のタップは、別の場所にある場合、それが起こるだろう。それほど幸せではないので、私はこれをさらに調べる必要があるので、私はこの答えをまだ受け入れていません。 action_moveがピンチによって呼び出される前に、私は何とか2番目のAction_Downを消費するかどうかを知る必要があります。

関連する問題