Я пытаюсь создать альтернативный вариант для одной руки с курсором для достижения верхних уровней устройства android с помощью курсора. Я отслеживаю движения с помощью трекера в нижней части экрана с помощью сенсорного прослушивателя, распознаю нажатия пользователя и пытаюсь выполнить эти нажатия в том месте, где находится указатель. И иногда это работает, а иногда нет. И я не могу понять, почему?
Я включил android: canPerformGestures = "true" в метаданные службы.
Это код, который я использовал для выполнения жестов клика
// duration must be set in ms according to long click or simple click
long duration;
if (isLongClick){
duration = 400L;
}else{
duration = 103L;
}
GestureDescription.Builder builder = new GestureDescription.Builder();
Point point = new Point(cursorParams.x,cursorParams.y);
Path path = new Path();
path.moveTo( point.x, point.y);
path.lineTo( point.x + 50, point.y + 50);
GestureDescription.StrokeDescription clickStroke =
new GestureDescription.StrokeDescription(path,10, duration);
builder.addStroke(clickStroke);
GestureDescription description = builder.build();
boolean isDispatched = dispatchGesture(description, new GestureResultCallback() {
@Override
public void onCompleted(GestureDescription gestureDescription) {
super.onCompleted(gestureDescription);
Log.d("GestureClick","Gesture completed successfully");
}
@Override
public void onCancelled(GestureDescription gestureDescription) {
super.onCancelled(gestureDescription);
Log.d("GestureClick","Gesture failed");
}
},null);
Я пытался изменить время и продолжительность начала, а также изменить путь с помощью оператора lineTo и без него. Но все заканчивается тем же результатом. И я также попытался вернуть оба true или false в сенсорном слушателе, где я захватил жесты, в случае, если они прерывают жесты диспетчеризации.
Во всех этих попытках результат один и тот же, иногда жест работает, нажимая на предполагаемое место на экране и большую часть времени это не так. И он всегда перехватывает метод onCompleted на GestureResultCallback.