Я думаю, у вас несколько проблем. То, как вы строите свой жест, немного отличается, и количество пикселей, которые вы должны переместить, чтобы это было смахиванием, больше, чем вы думаете! Я бы рассчитал это на основе размера экрана, а не определенного количества пикселей. Я думаю о типичном жесте смахивания примерно как половина экрана, происходящем от одной стороны к другой, прямо посередине высоты.
Я настроил глупый маленький слушатель «onAccessibilityEvent», который на моем Nexus 6 прыгает туда-сюда между домашним экраном 1 и домашним экраном два. Чтобы увидеть его в действии, у вас должны быть настроены два домашних экрана.
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
switch (event.getEventType()) {
case AccessibilityEvent.TYPE_ANNOUNCEMENT:
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
int middleYValue = displayMetrics.heightPixels / 2;
final int leftSideOfScreen = displayMetrics.widthPixels / 4;
final int rightSizeOfScreen = leftSideOfScreen * 3;
GestureDescription.Builder gestureBuilder = new GestureDescription.Builder();
Path path = new Path();
if (event.getText() != null && event.getText().toString().contains("1")) {
//Swipe left
path.moveTo(rightSizeOfScreen, middleYValue);
path.lineTo(leftSideOfScreen, middleYValue);
} else {
//Swipe right
path.moveTo(leftSideOfScreen, middleYValue);
path.lineTo(rightSizeOfScreen, middleYValue);
}
gestureBuilder.addStroke(new GestureDescription.StrokeDescription(path, 100, 50));
dispatchGesture(gestureBuilder.build(), new GestureResultCallback() {
@Override
public void onCompleted(GestureDescription gestureDescription) {
Log.w("Gesture Completed");
super.onCompleted(gestureDescription);
}
}, null);
}
default: {
break;
}
}
}
Также важна информация о конфигурации специальных возможностей, проверьте мой XML-файл конфигурации.
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:description="@string/accessibility_service_description"
android:accessibilityEventTypes="typeAllMask"
android:accessibilityFlags="flagReportViewIds"
android:canRetrieveWindowContent="true"
android:canRequestTouchExplorationMode="true"
android:accessibilityFeedbackType="feedbackSpoken"
android:notificationTimeout="100"
android:settingsActivity="com.moba11y.basicaccessibilityservice.SettingsActivity"
android:canPerformGestures="true"
/>
РЕДАКТИРОВАТЬ:
Чтобы поддерживать смахивание вверх или вниз, вам просто нужно изменить аргументы пути.
final int height = displayMetrics.heightPixels;
final int top = height * .25;
final int mid = height * .5;
final int bottom = height * .75;
final int midX = displayMetrics.widthPixels / 2;
if(swipeUp) {
path.moveTo(midX, bottom);
path.lineTo(midX, top);
} else {
path.moveTo(midX, top);
path.lineTo(midX, bottom);
}
person
ChrisCM
schedule
09.06.2017
dispatchGesture
? правда или ложь? - person pskink   schedule 07.06.2017GestureResultCallback#onCompleted
называется? - person pskink   schedule 07.06.2017Path p
пуст - в нем толькоmoveTo
, больше ничего - person pskink   schedule 07.06.2017lineTo
или что-то в этом роде - person pskink   schedule 07.06.2017