Переключение координат на ACTION_MOVE - PullRequest
1 голос
/ 24 июня 2011

Я написал код для перемещения кнопки при ее перетаскивании. Я обновляю координаты кнопок X и Y на основе текущих координат мыши, но при перетаскивании кнопки значения координат мыши переключаются между низкими и высокими значениями, даже если я перетаскиваю очень медленно.

Когда я регистрирую координаты, значения отображаются как:

(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 Ответ

1 голос
/ 01 июля 2011

Я не проверял это с вашим кодом, но у меня было нечто подобное, случалось со мной в прошлом.

Функции getX () и getY () возвращают значения, относящиеся к вашей кнопке. Поскольку вы меняете положение кнопки в onTouchListener, вы также изменяете систему координат, на которой основаны getX () и getY ().

Попробуйте вместо этого использовать getRawX () и getRawY (). Эти функции не зависят от положения кнопки и не должны давать вам чередующиеся значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...