2011-06-24 11 views
1

ボタンをドラッグしたときに移動するコードを記述しました。現在のマウス座標に基づいてボタンXとYの座標を更新していますが、ボタンをドラッグしているときに、マウスの座標値が低値と高値の間で切り替わります。私は、値として示した座標ログインしていた場合ACTION_MOVEの座標の切り替え

:あなたが見ることができるように

(70, 24) - (15, 36) - (86, 51) - (20, 48) - (90, 54) - (32, 60) - (102, 66) ... 

を、彼らは私が一つの方向に非常にゆっくりとドラッグしていた場合でも、高い値と低い値の間でトグルされています。なぜ誰かが私に言うことができますか?ここで

が私のコードです:

public class MyFrames extends Activity implements View.OnTouchListener { 
public Button moveable; 
// public TextView log; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    //changer = (Button) findViewById(R.id.btn_changer); 
    moveable = (Button) findViewById(R.id.btn_moveable); 

    moveable.setOnTouchListener(this); 
} 

@Override 
public boolean onTouch(View v, MotionEvent event) { 
    // TODO Auto-generated method stub 
    switch(event.getAction() & MotionEvent.ACTION_MASK) { 
    case MotionEvent.ACTION_MOVE: 
     int x = (int)event.getX(); 
     int y = (int)event.getY(); 
     int w = moveable.getMeasuredWidth(); 
     int h = moveable.getMeasuredHeight(); 
     moveable.layout(x, y, x + w, y + h); 
     Log.v("Moveable", "X = " + x + " Y = " + y + "\n"); 
     return true; 
    } 
    return false; 
} 

} 

答えて

1

私はあなたのコードでそれをテストしていませんが、私は過去に私に起こる似た何かを持っていました。

getX()およびgetY()関数は、ボタンに関連する値を返します。 onTouchListenerのボタンの位置を変更しているので、getX()とgetY()が基づいている座標系も変更します。

代わりにgetRawX()とgetRawY()を使用してみてください。これらの関数はButtonの位置とは無関係で、値を交互に与えるべきではありません。

+0

ありがとうございます!それはそれをした! –

+1

私は助けることができてうれしいです!奨励金を稼ぐには十分に役立ったのですか? – theisenp

+0

確かに、私はそれに夢中になっていた。私はずっと前に質問を投稿しましたが、誰も私を正しい方向に向けることはできませんでした。あなたの助けに感謝します。 –