Android12平板修改了SF_PRIMARY_DISPLAY_ORIENTATION后,TP不对了
时间: 2023-07-31 13:07:27 浏览: 98
SF_Genesis-v1.7_sf2281开卡工具1.7版_sf_genesis_SF_Genesis-v1.7_
5星 · 资源好评率100%
Android 12 平板修改 SF_PRIMARY_DISPLAY_ORIENTATION 可能会导致触控输入的坐标系发生变化,从而导致触控输入不准确。这种情况下,你可以尝试通过修改 InputReader 的代码来解决问题。
具体来说,你可以在 InputReader::syncTouch 属性中添加以下代码:
```cpp
// Get the current display orientation.
int32_t displayOrientation = ISurfaceComposer::get()->getDisplayOrientation();
// If the primary display orientation is different from the current display orientation,
// we need to adjust the touch coordinates.
if (displayOrientation != mPolicy->getRotation()) {
adjustTouchCoordinates(displayOrientation);
}
```
其中,adjustTouchCoordinates 函数可以实现触控坐标的转换。例如,如果当前的坐标系是横屏模式,而 SF_PRIMARY_DISPLAY_ORIENTATION 设置为竖屏模式,那么我们需要将触控坐标进行转换,以匹配新的坐标系。
此外,你还需要在 InputReader::syncTouch 属性中添加以下代码,以确保触控坐标的正确性:
```cpp
// Get the current display size.
int32_t displayWidth, displayHeight;
ISurfaceComposer::get()->getDisplaySize(0, &displayWidth, &displayHeight);
// Adjust the touch coordinates to match the current display size.
int32_t touchX = (int32_t)(touch.x * displayWidth / mWidth);
int32_t touchY = (int32_t)(touch.y * displayHeight / mHeight);
// Create a new MotionEvent with the adjusted coordinates.
MotionEvent ev = MotionEvent.obtain(eventTime, eventTime, action, pointerCount, pointerProperties, pointerCoords, metaState, buttonState, xPrecision, yPrecision, deviceId, edgeFlags, source, flags);
ev.offsetLocation(touchX - touch.x, touchY - touch.y);
```
这样,就能够解决 Android 12 平板修改 SF_PRIMARY_DISPLAY_ORIENTATION 后触控输入不准确的问题了。
阅读全文