实现动态设置屏幕旋转的补丁可参考:
https://download.csdn.net/download/weixin_71092993/88244740
实现TP随着屏幕旋转:
有朋友在使用其他文章的方法修改TP旋转时,会发现没有效果。原因是在于使用property_get函数时不能正确读取到属性的值,property_get函数的第一个参数需要根据设定屏幕旋转的属性改,这里我所设定的属性是:"ro.surface_flinger.primary_display_orientation"。
完整TP随着屏幕旋转的patch如下:
diff --git a/frameworks/native/services/inputflinger/reader/mapper/TouchInputMapper.cpp b/frameworks/native/services/inputflinger/reader/mapper/TouchInputMapper.cpp
index 99a572a5fd..98c5261d90 100644
--- a/frameworks/native/services/inputflinger/reader/mapper/TouchInputMapper.cpp
+++ b/frameworks/native/services/inputflinger/reader/mapper/TouchInputMapper.cpp
@@ -22,6 +22,7 @@
#include "CursorScrollAccumulator.h"
#include "TouchButtonAccumulator.h"
#include "TouchCursorInputMapperCommon.h"
+#include <cutils/properties.h>
namespace android {
@@ -667,6 +668,25 @@ void TouchInputMapper::configureSurface(nsecs_t when, bool* outResetNeeded) {
bool viewportChanged = mViewport != *newViewport;
if (viewportChanged) {
mViewport = *newViewport;
+ viewportChanged = true;
+
+ char property_data[128];
+ property_get("ro.surface_flinger.primary_display_orientation", property_data, NULL);
+ ALOGI("property_data:%s..",property_data);
+
+ if(strstr(property_data,"ORIENTATION_0")){
+ mViewport.orientation = mViewport.orientation + DISPLAY_ORIENTATION_0;
+ }else if(strstr(property_data,"ORIENTATION_90")){
+ mViewport.orientation = mViewport.orientation + DISPLAY_ORIENTATION_90;
+ }else if(strstr(property_data,"ORIENTATION_180")){
+ mViewport.orientation = mViewport.orientation + DISPLAY_ORIENTATION_180;
+ }else if(strstr(property_data,"ORIENTATION_270")){
+ mViewport.orientation = mViewport.orientation + DISPLAY_ORIENTATION_270;
+ }
if (mDeviceMode == DEVICE_MODE_DIRECT || mDeviceMode == DEVICE_MODE_POINTER) {
// Convert rotated viewport to natural surface coordinates.