Android12系统中SF_PRIMARY_DISPLAY_ORIENTATION
时间: 2023-09-19 11:05:36 浏览: 285
SF_PRIMARY_DISPLAY_ORIENTATION是Android 12系统中的一个常量,它表示主显示器的方向。在Android中,屏幕方向被定义为四个值:0表示纵向正立,1表示横向正向,2表示纵向颠倒,3表示横向颠倒。而SF_PRIMARY_DISPLAY_ORIENTATION则是一个整数常量,用于表示主显示器的方向,其取值范围为0-3,对应上述四个方向。它通常用于在应用程序中确定当前设备的方向,以便正确地布局和呈现UI元素。
相关问题
Android12平板修改了SF_PRIMARY_DISPLAY_ORIENTATION后,TP不对了
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 后触控输入不准确的问题了。
阅读全文