В настоящее время я занимаюсь программированием на Android, но у меня есть небольшая проблема, обнаруживающая различные события касания, а именно нормальное нажатие (нажмите на экран и сразу отпустите), долгое нажатие (коснитесь экрана и удерживайте палец на нем) и движение (перетаскивание по экрану).
То, что я хотел сделать, это иметь изображение (круга) на экране, которое я могу перетащить. Затем, когда я нажимаю один раз (короткое/нормальное нажатие), Toast придумывает некоторые основные сведения об этом. Когда я долго нажимаю на него, появляется AlertDialog со списком, чтобы выбрать другое изображение (круг, прямоугольник или треугольник).
Я сделал собственный вид с собственным OnTouchListener, чтобы обнаружить события и нарисовать изображение в onDraw. OnTouchListener.onTouch выглядит примерно так:
// has a touch press started?
private boolean touchStarted = false;
// co-ordinates of image
private int x, y;
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
if (action == MotionEvent.ACTION_DOWN) {
touchStarted = true;
}
else if (action == MotionEvent.ACTION_MOVE) {
// movement: cancel the touch press
touchStarted = false;
x = event.getX();
y = event.getY();
invalidate(); // request draw
}
else if (action == MotionEvent.ACTION_UP) {
if (touchStarted) {
// touch press complete, show toast
Toast.makeText(v.getContext(), "Coords: " + x + ", " + y, 1000).show();
}
}
return true;
}
Проблема в том, что пресса работает не так, как ожидалось, потому что, когда я случайно касаюсь экрана, она также обнаруживает крошечный бит движения и отменяет сенсорное нажатие и перемещается вокруг изображения.
Я немного "взломал" это введение новой переменной "mTouchDelay", которую я установил в 0 на ACTION_DOWN, увеличил MOVE, а если он >= 3 в MOVE, я выполняю свой код "move". Но у меня такое чувство, что на самом деле это не так.
Я также не узнал, как обнаружить длинную печать. Виновником действительно является MOVE, которая, кажется, всегда срабатывает.
Для примера того, что я грубо хочу, см. приложение Android "DailyStrip": он показывает изображение комикса. Вы можете перетащить его, если он слишком большой для экрана. Вы можете нажать один раз, чтобы некоторые элементы управления отображались всплывающие окна и долго нажимали на него для меню параметров.
PS. Я пытаюсь заставить его работать на Android 1.5, так как мой телефон работает только на 1.5.