Меня попросили изменить существующий код как часть онлайн-курса. В настоящее время приложение регистрирует и отображает координаты x и y позиции, в которой коснулся экран, а также количество времени в миллисекундах.Как получить начальную и конечную координаты на событии Android Touch (событие движения)?
Я хочу добавить функцию получения как начальной, так и конечной координат, где начинается палец, и где он заканчивается при перетаскивании. В настоящий момент зарегистрированные координаты кажутся только конечными. Как добавить оба набора координат (например, если я хочу рассчитать расстояние события движения)? Вот часть кода. Спасибо за помощь!
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
Calendar tiempoInicio = null;
Calendar tiempoFinal = null;
@Override
public boolean onTouchEvent(MotionEvent event) {
int x = (int)event.getX();
int y = (int)event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
tiempoInicio = Calendar.getInstance();
break;
case MotionEvent.ACTION_MOVE:
break;
case MotionEvent.ACTION_UP:
tiempoFinal = Calendar.getInstance();
Intent intent = new Intent (
AplicacionSencillaActivity.this,
AplicacionSencillaResults.class);
Bundle bundle = new Bundle();
bundle.putLong(
"TIEMPOPRESIONADO",
tiempoFinal.getTimeInMillis() -
tiempoInicio.getTimeInMillis());
bundle.putInt("X", x);
bundle.putInt("Y", y);
intent.putExtras(bundle);
startActivity(intent);
break;
Спасибо, Иван! Однако приложение все еще регистрирует только последние координаты. Нужно ли мне getX и getY во время ACTION_DOWN, как говорит Geobits ниже? Если да, то где именно я должен поставить код? –
Да, я предположил, что это то, что вы уже делаете :) Как это работает, вы получаете все события, которые дает вам экран, и ваша работа заключается в том, чтобы выяснить, что происходит. Я бы использовал элемент для хранения состояния. Как 'boolean mIsSwiping'. Когда вы получаете 'ACTION_DOWN', установите его в' true' и прочитайте координаты начальной точки. Когда вы получаете 'ACTION_UP': если' mIsSwiping' является 'истинным', тогда прочитайте завершающие координаты и установите' mIsSwiping' в 'false', если нет - ничего не делать. –
Отметьте это для справки: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.3.3_r1/android/widget/ScrollView.java#483 Обратите внимание, как для 'ACTION_DOWN' они в основном устанавливают' mIsBeingDragged' (в зависимости от количества детей, но это потому, что это 'ScrollView', вы не можете прокручивать, если у него есть дочерний элемент) до' true' и для 'ACTION_U'P или' ACTION_CANCEL' они установите 'mIsBeingDragged' значение false –