1

/dev/input/event0 を読み取る C コードを作成してから、rawX と rawY を読み取りますが、Activity OnTouch 関数で、rawX と rawY に等しくない x と y を取得します。関係があることは知っていますが、変換する方法がわかりません。たぶん、いくつかのファイルの何かが私にそれらを変換させることができますか?

C コードは次のようになります。

    while (!is_stop) {
        read(fd, &ev, sizeof(struct input_event));
        switch (ev.type) {
            case EV_SYN:
                if(x != 0 && y != 0) {
                    (*env)->SetIntField(env,obj, x_id, x);
                    (*env)->SetIntField(env, obj, y_id, y);
                }
                //LOGI("sync");
                break;
            case EV_KEY:
                if (ev.code == BTN_TOUCH) {
                    if (ev.value == 1) { // finger down
                        LOGI("finger down,keycode is %d keyvalue is %d", ev.code, ev.value);
                    } else if (ev.value == 0) { //finger up,上一次x,y是0
                        finger_up = 1;
                        LOGI("finger up,keycode is %d keyvalue is %d", ev.code, ev.value);
                    }
                }
               break;
            case EV_ABS:
                if (ev.code == ABS_X) {
                    LOGI("abs_x:%d\n", ev.value);
                    x = ev.value;
                }
                else if (ev.code == ABS_Y) {
                    LOGI("abs_y:%d\n", ev.value);
                    y = ev.value;
                }
                break;
            default:
                break;
        }
        is_stop = (*env)->GetBooleanField(env, obj, stop_id);
    }
    close(fd);

そして、次のようなJavaコード

@Override
public boolean onTouchEvent(MotionEvent event) {
    float x = event.getRawY();
    float y = event.getRawX();
    Log.i(TAG, "x = " + x + " y = " + y);
    if (marker != null) {
        int xy[] = marker.getLocation();
        Log.i(TAG, "rawx = " + xy[0] + " rawy = " + xy[1]);
    }
            // the rawx != x and rawy != y ,how to convert?

    return super.onTouchEvent(event);
}

誰かが助けることができますか?

4

0 に答える 0