2012-05-28 2 views
4

Я новичок в андроиде, и некоторое время я пытался выяснить, как я могу получить координаты непрерывного касания на экране. например, имеют 2 vars (x, y), которые обновляются в реальном времени, когда палец перемещается. Я понял, как его найти, когда прикосновение сделано, но я действительно не понимаю, как заставить его вернуть результат после этого, когда палец движется.Координаты непрерывного касания Android (x, y)

Я пытался использовать инструкции switch, в то время как/для циклов в другой комбинации с ACTION_MOVE./ UP/DOWN ... Ничего не делать.

Я нашел тот же вопрос на сайте, но ответы подходят только для первого шага (показывая координацию только с прикосновением). Я бы очень признателен за решение этого! Благодаря!

ответ

10

Не видя кода я только гадать, но, по сути, если вы не вернете true к первому вызову onTouchEvent, вы не увидите какой-либо из последующих событий в жесте (MOVE, UP, и т.д.) ,

Возможно, это ваша проблема? В противном случае добавьте образец кода.

+1

Спасибо много Тима. Это действительно имеет смысл (глупая ошибка). Теперь работает. Здесь также есть код для тех, которые снова будут повторять ту же ошибку :) – user1422535

1

Вам необходимо реализовать OnTouchListener для любого вида, который вы хотите распознать.

Затем в OnTouchListener вам необходимо отобразить координаты X и Y. Я думаю, вы можете получить их через MotionEvent.getRawX() и MotionEvent.getRawY()

Вы можете использовать способ MotionEvent.getAction(), чтобы узнать, когда происходит перетаскивание. Я считаю, что константа равна MotionEvent.ACTION_MOVE. Вот некоторые псевдо-код:

Добавить интерфейс OnTouchListener

public class XYZ extends Activity implements OnTouchListener 

Регистрация слушателя в OnCreate метод

public void onCreate(Bundle savedInstanceState) 
{ 
    //other code 

    View onTouchView = findViewById(R.id.whatever_id); 
    onTouchView.setOnTouchListener(this); 
} 

Реализуйте метод onTouch

public boolean onTouch(View view, MotionEvent event) 
{ 
    if(event.getAction() == MotionEvent.ACTION_MOVE) 
    { 
     float x = event.getRawX(); 
     float y = event.getRawY(); 
     // Code to display x and y go here 
     // you can print the x and y coordinate in a textView for exemple 
    } 
} 
+1

Спасибо большое :) Хотя это правильно, проблема, с которой я столкнулся, была заявлением о возврате, которое было ложным, и поэтому Action_Move не изменилось, чтобы что-то вернуть. ! – user1422535

+0

Как получить все точки движения? –

9
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    final TextView xCoord = (TextView) findViewById(R.id.textView1); 
    final TextView yCoord = (TextView) findViewById(R.id.textView2); 

    final View touchView = findViewById(R.id.textView3); 
    touchView.setOnTouchListener(new View.OnTouchListener() { 

     public boolean onTouch(View v, MotionEvent event) { 
      final int action = event.getAction(); 
      switch (action & MotionEvent.ACTION_MASK) { 

       case MotionEvent.ACTION_DOWN: { 
        xCoord.setText(String.valueOf((int) event.getX())); 
        yCoord.setText(String.valueOf((int) event.getY())); 
        break; 
       } 

       case MotionEvent.ACTION_MOVE:{ 
        xCoord.setText(String.valueOf((int) event.getX())); 
        yCoord.setText(String.valueOf((int) event.getY())); 
        break; 
       } 
      } 
      return true; 

     } 

    }); 
}