android 4.4 屏幕方向,Android4.4屏幕旋转功能
由于Android4.4系统上去掉了ro.sf.hwrotation属性的支持,因为不能使用之前的方法进行屏幕旋转了。暂时没有找到相应的属性和后门,于是自己写了一个屏幕旋转的临时代码,后面找到更好的方法后再替换。具体代码如下:
~/framework/native/services/surfaceflinger/DisplayDevice.cpp
uint32_t DisplayDevice::getOrientationTransform() const {
...
if (property_get("persist.sys.hwrotation", property, NULL) > 0) {
switch (atoi(property)) {
case 90:
transform = Transform::ROT_90;
break;
case 270:
transform = Transform::ROT_270;
break;
}
}
return transform;
}
status_t DisplayDevice::orientationToTransfrom(
int orientation, int w, int h, Transform* tr)
{
...
if (property_get("persist.sys.hwrotation", property, NULL) > 0) {
switch (atoi(property)) {
case 90:
flags = Transform::ROT_90;
break;
case 270:
flags = Transform::ROT_270;
break;
}
}
tr->set(flags, w, h);
return NO_ERROR;
}
void DisplayDevice::setProjection(int orientation,
const Rect& newViewport, const Rect& newFrame) {
...
if (!frame.isValid()) {
if (property_get("persist.sys.hwrotation", property, NULL) > 0) {
switch (atoi(property)) {
case 90:
case 270:
frame = Rect(h, w);
break;
default:
frame = Rect(w, h);
break;
}
} else
frame = Rect(w, h);
} else {
...
}
}
~/framework/base/services/input/InputReader.cpp
void TouchInputMapper::configureSurface(nsecs_t when, bool* outResetNeeded) {
...
if (property_get("persist.sys.hwrotation", property, NULL) > 0) {
switch (atoi(property)) {
case 90:
mSurfaceOrientation = DISPLAY_ORIENTATION_90;
break;
case 270:
mSurfaceOrientation = DISPLAY_ORIENTATION_270;
break;
}
}
switch (mSurfaceOrientation) {
case DISPLAY_ORIENTATION_90:
case DISPLAY_ORIENTATION_270:
}
~/framework/native/services/surfaceflinger/SurfaceFlinger.cpp
status_t SurfaceFlinger::getDisplayInfo(const sp& display, DisplayInfo* info) {
...
info->w = hwc.getWidth(type);
info->h = hwc.getHeight(type);
if (property_get("persist.sys.hwrotation", property, NULL) > 0) {
switch (atoi(property)) {
case 90:
case 270:
if (type != DisplayDevice::DISPLAY_EXTERNAL) {
info->w = hwc.getHeight(type);
info->h = hwc.getWidth(type);
}
break;
default:
break;
}
}
info->xdpi = xdpi;
info->ydpi = ydpi;
info->fps = float(1e9 / hwc.getRefreshPeriod(type));
...
}
void SurfaceFlinger::onInitializeDisplays() {
...
d.orientation = DisplayState::eOrientationDefault;
char property[PROPERTY_VALUE_MAX];
if (property_get("persist.sys.hwrotation", property, NULL) > 0){
switch (atoi(property)) {
case 0:
d.orientation = DisplayState::eOrientationDefault;
break;
case 90:
d.orientation = DisplayState::eOrientation90;
break;
case 180:
d.orientation = DisplayState::eOrientation180;
break;
case 270:
d.orientation = DisplayState::eOrientation270;
break;
default:
d.orientation = DisplayState::eOrientationDefault;
break;
}
} else {
d.orientation = DisplayState::eOrientationDefault;
}
d.frame.makeInvalid();
d.viewport.makeInvalid();
}
~/framework/base/services/java/com/android/server/wm/WindowManagerService.java
boolean updateOrientationFromAppTokensLocked(boolean inTransaction) {
...
if (req != mForcedAppOrientation) {
if ("0".equals(SystemProperties.get("persist.sys.hwrotation", "0")))
req = ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT;
else if ("90".equals(SystemProperties.get("persist.sys.hwrotation", "0")))
req = ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE;
else if ("180".equals(SystemProperties.get("persist.sys.hwrotation", "0")))
req = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
else if ("270".equals(SystemProperties.get("persist.sys.hwrotation", "0")))
req = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
else
req = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
}
...
}
android 4.4 屏幕方向,Android4.4屏幕旋转功能相关推荐
- Flutter中获取监听屏幕方向、锁定屏幕方向
文章目录 获取当前屏幕的方向 实时监听屏幕方向的改变 锁定屏幕方向 锁定方向,禁止App随着设备的方向改变 锁定启动图的方向 默认效果 Android配置 IOS配置 动态改变Flutter的屏幕方向 ...
- H5+ 常用API(拨打电话,设备震动,屏幕方向,屏幕亮度,设备信息...等)
写在前面 H5+ 所有功能都只能在 plusReady 事件加载完成后调用 mui.plusReady(function() { // 扩展API加载完成事件var self = plus.webvi ...
- Android屏幕方向调整的两种方式
Android屏幕方向调整 作者:坚果 公众号:"大前端之旅" 华为云享专家,InfoQ签约作者,阿里云专家博主,51CTO博客首席体验官,开源项目GVA成员之一,专注于大前端技术 ...
- android+note2+分辨率,Android自适应屏幕方向、大小和分辨率
屏幕大小 1.不同的layout Android手机屏幕大小不一,有480x320,640x360,800x480.怎样才能让App自动适应不同的屏幕呢?其实很简单,只需要在res目录下创建不同的la ...
- android无法自动旋屏,Android 手动设置屏幕方向后不能自动转屏问题
如题,Android在手动设置屏幕方向后不能使用自动转屏了,这是因为手动设置屏幕方向 如: setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATIO ...
- 在Android的 设置-显示 中增加控制屏幕旋转方向的选项
在Android的 设置->显示 中增加控制屏幕旋转方向的选项 参考博文 实现目标 效果局限 代码实现 配置资源文件 界面搭建 功能实现 默认值修改 其他情况 结语 参考博文 Android-x ...
- android 获得屏幕方向,Android 获取设置屏幕横竖屏
Android 获取设置屏幕横竖屏 发布时间:2020-08-06 03:23:17 来源:51CTO 阅读:351 作者:huyanruirui 方法一: screenOrientation = a ...
- android自适应屏幕方向,Android 屏幕自适应方向尺寸与分辨率-Fun言
摘要: Android 屏幕自适应方向尺寸与分辨率,android 自适应分辨率,android 屏幕自适应,android 图片自适应,android 横屏布局,包括屏幕界面布局.多分辨率支持.获 ...
- android获取键盘状态,Android获取屏幕方向及键盘状态的小例子
Android获取屏幕方向及键盘状态的小例子 复制代码 代码如下: Configuration config = getResources().getConfiguration(); if (conf ...
最新文章
- matlab datetime时间处理、时间转换
- 从HashiCorp Nomad对上百万容器进行调度所学到的经验
- 程序练习:Matlab 实现最小二乘法
- 【caffe-matlab】使用matlab训练caffe及绘制loss
- 补习系列(12)-springboot 与邮件发送
- 将三角形绕点b顺时针旋转90度_模型 | 图形旋转与翻折题型汇编
- java制作纯字rpg小游戏_求java rpg小游戏源代码 最好是文字rpg 不需要很复杂 只是交作业用...
- 计算机应用基础 东师 离线,奥鹏东师秋季计算机应用基础离线作业答案
- 提交表单的时候会出现提交两次的问题
- 区块链 智能合约安全 重入攻击(re-entrancy attack)DAO incident
- 根据题目完成以下50道SQL语句
- 2018-11高级软考试题考查知识点总结(试题1-20)
- STA series --- 3.Standard cell library(PART-I)
- 同济大学软件学院特聘教授朱少民谈《测试,从哪里来,到哪里去》
- 深信服“监控员工跳槽倾向”引争议,律师称未告知员工涉嫌违法
- vue3+ts+vite,使用高德api实现搜索城市展示在地图上
- 学术论文rebuttal
- SQL函数--按指定符号分割字符串
- 湖南农业大学计算机考试试题,湖南农业大学机械CADCAM考试复习题
- LearnOpenGL笔记->入门->变换与坐标系统
热门文章
- KubeVela v1.2 发布:你要的图形化操作控制台 VelaUX 终于来了
- 怕入错行?这群技术人写了本“择业指南”
- 应用配置管理ACM 使用场景快速入门
- 车联网上云最佳实践(二)
- 19个AI热门应用领域,你确定不了解一下?
- 【免费公测中】为数据赋予超能力,阿里云重磅推出Serverless数据分析引擎-Data Lake Analytics
- OpenStack 如何跨版本升级
- 技术大佬:今年还学Python,傻了吧? 网友:就你敢说!
- 【重磅快讯】T11 2019数据智能技术峰会举办,AI将成为行业颠覆者
- 阿里数据总监分享《阿里数据中台建设实践案例》,PPT+语音讲解!