1

ドラッグ可能にしたいものがあるので、そのメソッドをViewオーバーライドし、移動イベントで、イベントアクションの(x、y)座標に基づいて位置を変更/変換します。でも!右をドラッグすると(たとえば)、イベントアクションのx座標が着実に増加しておらず(つまり... 15、16、17、18 ...)、代わりにインターリーブされている(つまり... 15)ことがわかります。 、23、16、24、17、25 ...)したがって、私の動きはぎくしゃくします。(同様に、左、上、下などにドラッグします)onTouchEvent(MotionEvent event)ViewViewView

なぜこれが起こるのか、そしてどうすればそれを回避できるのか誰もが知っていますか?!

これが私のonTouchEvent(..)方法です...

@Override
public boolean onTouchEvent(MotionEvent event)
{
  switch (event.getAction())
  {
  case MotionEvent.ACTION_DOWN:
    // make note of the down action's (x, y) coordinate
    action_down_x = event.getX();
    action_down_y = event.getY();
    return true;
  case MotionEvent.ACTION_MOVE:
    // work out displacement
    dX = event.getX() - action_down_x;
    dY = event.getY() - action_down_y;
    // code here to move the view
    return true;
  case MotionEvent.ACTION_UP:
    return true;
  }

  return super.onTouchEvent(event);
}
4

1 に答える 1

1

問題は非常に単純です。2つの相対座標で作業しています。ビューからをオーバーライドするonTouchEvent()と、値が10、10になる場合があります。ここで指を動かすと、新しい値、たとえば9,9が得られるので、ビューの位置を変更すると、指は再びビュー座標系の10,10になります。

私がすること:onTouchEvent()あなたが同じ座標系にとどまるように、親のをオーバーライドします。実装は見栄えが良いので、コードを親ビュー/アクティビティに移動するだけで簡単に機能するはずです。

于 2013-01-07T13:19:18.030 に答える