WEB开发网
开发学院手机开发Android 开发 Android多点触摸的实现 阅读

Android多点触摸的实现

 2010-09-10 00:51:00 来源:WEB开发网   
核心提示:………………… .public static final int SYN_REPORT = 0;public static final int SYN_CONFIG = 1;public static final int SYN_MT_REPORT = 2;……………… ..在Android 中,多点触摸的实现方法在具

………………… .

public static final int SYN_REPORT = 0;

public static final int SYN_CONFIG = 1;

public static final int SYN_MT_REPORT = 2;

……………… ..

Android 中,多点触摸的实现方法在具体的代码实现中和单点是完全区分开的。在 Android 代码的 EventHub.cpp 中,单点屏和多点屏由如下代码段来判定:

int EventHub::open_device(const char *deviceName)

{

………………………

if (test_bit(ABS_MT_TOUCH_MAJOR, abs_bitmask)

&& test_bit(ABS_MT_POSITION_X, abs_bitmask)

&& test_bit(ABS_MT_POSITION_Y, abs_bitmask)) {

device->classes |= CLASS_TOUCHSCREEN | CLASS_TOUCHSCREEN_MT;

// LOGI("It is a multi-touch screen!");

}

//single-touch?

else if (test_bit(BTN_TOUCH, key_bitmask)

&& test_bit(ABS_X, abs_bitmask)

&& test_bit(ABS_Y, abs_bitmask)) {

device->classes |= CLASS_TOUCHSCREEN;

// LOGI("It is a single-touch screen!");

}

……………… ..

}

我们知道,在触摸屏驱动中,通常在probe 函数中会调用 input_set_abs_params 给设备的input_dev 结构体初始化,这些 input_dev 的参数会在 Android 的 EventHub.cpp 中被读取。如上可知,如果我们的触摸屏想被当成多点屏被处理,只需要在驱动中给 input_dev 额外增加以下几个参数即可:

input_set_abs_params(mcs_data.input, ABS_MT_POSITION_X, pdata->abs_x_min, pdata->abs_x_max, 0, 0);

input_set_abs_params(mcs_data.input, ABS_MT_POSITION_Y, pdata->abs_y_min, pdata->abs_y_max, 0, 0);

input_set_abs_params(mcs_data.input, ABS_MT_TOUCH_MAJOR, 0, 15, 0, 0);

//相当于单点屏的 ABX_PRESSURE

input_set_abs_params(mcs_data.input, ABS_MT_WIDTH_MAJOR, 0, 15, 0, 0);

//相当于单点屏的 ABS_TOOL_WIDTH

注:

为了让我们的驱动代码支持所有的Android 版本,无论是多点屏还是单点屏,一般都会保留单点屏的事件,如 ABS_TOUCH,

上一页  1 2 3 4 5 6 7  下一页

Tags:Android 多点 触摸

编辑录入:coldstar [复制链接] [打 印]
赞助商链接