2017-11-11 11 views
0

私はthis質問を見つけましたが、iOS開発用です。私はAndroidで何かしているので、何の助けにもならなかった。オブジェクト自体に触れずにSurfaceView上のオブジェクトを移動するにはどうすればいいですか?

私は黒いキャンバスにシンプルな白い矩形を持ち、onTouchEventを設定しました。私は予想どおりに矩形を移動することができますが、これは私が探している機能ではありません。

私は画面上のどこに触れてオブジェクトを動かすことができるかを知る必要がありますか?私は、オブジェクトのXとYを私のタッチイベントのgetX()とgetY()にしたくありません。今の

は、私が持っている:このため

@Override 
public boolean onTouchEvent(MotionEvent event) { 

    switch(event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
     case MotionEvent.ACTION_MOVE: 
      myPoint.set((int)event.getX(), (int)event.getY()); 
    } 
    return true; 
} 

私の推論は、オブジェクトがその上をホバリング指なしに見ることができるそうです。これは可能ですか?ここで

は私が達成したいよ何の視覚的な表現です:

onTouch example

答えて

1

後に火災再び(最初ACTION_MOVEをonTouchEventときに、以前のMotionEventはonTouchEventコールバックの座標を取得し、保管しない理由ACTION_DOWNなど、各ACTION_MOVEコールバックのために)は、値のオフセット/差を計算し、独自のmyPoint座標を取得し、現在の値にオフセットを追加します。この方法では、実際の座標ではなく、位置オフセットだけmyPointオブジェクトを移動します。私はこれに取り組んでいたが、あなたはそれに私を打つ

private float oldX; 
private float oldY; 

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      oldX = event.getX(); 
      oldY = event.getY(); 
      break; 

     case MotionEvent.ACTION_MOVE: 
      float newX = event.getX(); 
      float newY = event.getY(); 
      float offsetX = getOffset(oldX, newX, myPoint.x); 
      float offsetY = getOffset(oldY, newY, myPoint.y); 

      myPoint.set((int) offsetX, (int) offsetY); 

      oldX = newX; 
      oldY = newY; 
      break; 
    } 
    return true; 
} 

private float getOffset(float oldVal, float newVal, float current) { 
    return current + (newVal - oldVal); 
} 
+0

このコードは、テストされていないと私はIDEが、このようなものを使用していませんでした。それは働いているのです。私の長方形は、左上から右下に斜めにしか移動しません。笑。しかし、それは進歩です! – IRGeekSauce

+0

私は少し修正を加えました。 offsetXとoffsetYの宣言では、myPoint.xとmyPoint.yを実行しました。できます。私はあなたの答えをうれしく受け入れます。 – IRGeekSauce

+0

@IRGeekSauce ok、うまくいけばうれしいです(完了したばかりの更新されたソリューションでいつでも回答を編集できます)。 –

関連する問題