OnAccessibilityEvent: AccessibilityNodeInfo => Как узнать Rect.centerX и Rect.centerY каждого элемента? - PullRequest
0 голосов
/ 12 января 2019

Я хочу знать, как обнаружить Rect.centerX, Rect.centerY для каждого элемента, найденного при чтении активного представления?.

Вот мой код, который может читать активное представление:

protected void onServiceConnected() {
    super.onServiceConnected();

    AccessibilityServiceInfo tempInfo = getServiceInfo();
    tempInfo.flags |= AccessibilityServiceInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS;
    setServiceInfo(tempInfo);

}

//-------------------------------------------------------------------------------

public static void logNodeHeirarchy(AccessibilityNodeInfo nodeInfo, int depth) {

    if (nodeInfo == null) return;

    String logString = "";

    for (int i = 0; i < depth; ++i) {
        logString += " ";
    }

    logString += "Text: " + nodeInfo.getText() + " " + " Content-Description: " + nodeInfo.getContentDescription();

    Log.v(LOG_TAG, logString);

    for (int i = 0; i < nodeInfo.getChildCount(); ++i) {
        logNodeHeirarchy(nodeInfo.getChild(i), depth + 1);
    }
}

@Override
public void onAccessibilityEvent(AccessibilityEvent e) {

    switch (e.getEventType()) {
        case AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED: {
            logNodeHeirarchy(getRootInActiveWindow(), 0);
        }
    }

1 Ответ

0 голосов
/ 15 января 2019

РЕШЕНИЕ:


Для каждого nodeInfo мы можем использовать функцию getBoundsInScreen() для заполнения переменной Rect, которая передается как ссылка. Затем после этого мы можем получить значения, относящиеся к Rect.centerX() и Rect.centerY() соответственно.

Например:

public static void logNodeHeirarchy(AccessibilityNodeInfo nodeInfo, int depth) {

    if (nodeInfo == null) return;

    String logString = "";

    for (int i = 0; i < depth; ++i) {
        logString += " ";
    }

    ////////////////////////////////////

    Rect rect = new Rect();

    nodeInfo.getBoundsInScreen(rect);

    ///////////////////////////////////

    logString += " Text: " + nodeInfo.getText() + " " + " Content-Description: " + nodeInfo.getContentDescription() + " " + " RectCenterX: " + String.valueOf(rect.centerX()) + " " + " RectCenterY: " + String.valueOf(rect.centerY());

    Log.v(LOG_TAG, logString);

    for (int i = 0; i < nodeInfo.getChildCount(); ++i) {
        logNodeHeirarchy(nodeInfo.getChild(i), depth + 1);
    }
}
...