公司想做一个半屏功能,就是下拉屏幕显示一半;刚开始在网上找了很久,都没有相关的经验可以借鉴;最后只能靠自己去源码里面寻找方法了;
不多说,直接上代码:
1)先上触发调用的方法
try {
SystemProperties.set(“com.bsd.zoom.mode”,“1”);
DisplayManager dm = (DisplayManager) mContext.getSystemService(Context.DISPLAY_SERVICE);
Class<?> cDisplay = Class.forName(“android.hardware.display.DisplayManager”);
Method singleHandMet = cDisplay.getMethod(“singleHandModeChange”, boolean.class, boolean.class);
singleHandMet.invoke(dm, true,true);
}catch (Exception e){
e.printStackTrace();
}
(注:SystemProperties.set(“com.bsd.zoom.mode”,“1”);是判断半屏还是全屏,下面的放射方法是调用frameworks刷新界面)

2)frameworks\base\core\java\android\hardware\display\DisplayManager.java;
添加以下方法
public void singleHandModeChange(boolean change, boolean left){
mGlobal.singleHandModeChange(change,left);
}
3)frameworks\base\core\java\android\hardware\display\DisplayManagerGlobal.java;
添加以下方法
public void singleHandModeChange(boolean change,boolean left){
try{
mDm.singleHandModeChange(change,left);
}catch(RemoteException ex){
Log.w(“SingleHandMode”,“SingleHandMode Failed to singleHandChange error:”+ex.toString());
}
}
4)frameworks\base\core\java\android\hardware\display\IDisplayManager.aidl;
添加以下方法:
void singleHandModeChange(boolean change,boolean left);
5)frameworks\base\services\core\java\com\android\server\display\DisplayManagerService.java;
在BinderService内部类下添加:
private final SurfaceControl.Transaction mDisplayTransaction = new SurfaceControl.Transaction();
@Override // Binder call
public void singleHandModeChange(boolean change, boolean left) {
// mSingleHandModeState = change;
//mSingleHandModeLeft = left;
scheduleTraversalLocked(false);
performTraversalInternal(mDisplayTransaction);
}
6)frameworks\base\services\core\java\com\android\server\wm\WindowStateAnimator.java;
import android.os.SystemProperties;
在void setSurfaceBoundariesLocked(final boolean recoveringMemory)方法下
if (!w.mSeamlesslyRotated)判断语句内添加
if(SystemProperties.get(“com.bsd.zoom.mode”).equals(“1”)){
mTmpSize.top = 540;
}
//mSurfaceController.setPositionInTransaction(xOffset, yOffset, recoveringMemory);
mSurfaceController.setPositionInTransaction(mTmpSize.left, mTmpSize.top, recoveringMemory);
7)frameworks\base\services\core\java\com\android\server\display\LogicalDisplay.java;
在configureDisplayLocked方法里添加
String zoomState = SystemProperties.get(“com.bsd.zoom.mode”);
if(!zoomState.equals("") && zoomState != null){
if(zoomState.equals(“1”)){//降一半
mTempLayerStackRect.set(0, -displayInfo.logicalHeight/2, displayInfo.logicalWidth, displayInfo.logicalHeight/2);
}else{//复原
mTempLayerStackRect.set(0, 0, displayInfo.logicalWidth, displayInfo.logicalHeight);
}
}else{
mTempLayerStackRect.set(0, 0, displayInfo.logicalWidth, displayInfo.logicalHeight);
}
还有
int displayRectTop = (physHeight - displayRectHeight) / 2;
int displayRectLeft = (physWidth - displayRectWidth) / 2;

 if(!zoomState.equals("") && zoomState != null){if(zoomState.equals("1")){//降一半-触摸displayRectTop = displayRectHeight/2;displayRectLeft = 0;}}

MTK android 9.0半屏显示 单手模式相关推荐

  1. Android 4.0 全屏显示,在我的原道n90 ICS 4.0.3版本实验通过

    getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE); ("低调"模式 ...

  2. android 如何构建半屏显示的界面_如何实现android设备进入recovery界面后自动重启...

    问题背景: 因项目开发及测试需要,设备升级频率比较高,升级出现失败的情况肯定是有的,原因用多方面,如:故意使用非法的升级包,升级版本不匹配等等. 出现升级失败问题后,对于手机用户来说可以选择重启手机即 ...

  3. android解锁界面分析,Android 7.0 锁屏解锁之向上滑动显示解锁界面分析

    Android 7.0 锁屏解锁之向上滑动显示解锁界面分析 by jing.chen 锁屏的解锁操作是在锁屏界面向上滑动实现的,通过向上滑动调出解锁界面(如图案.PIN.密码解锁界面),在解锁界面输入 ...

  4. 模仿UC浏览半屏显示push消息过来的网页

    背景 不少浏览器在显示push消息时,采用半屏显示,顶部会露出一截,同时页面支持上下滑动,下滑还可以关闭页面. 下面是UC浏览器的效果: 我实现的效果 实现方案 方案一:继承FrameLayout,覆 ...

  5. 华为笔记本开发android,EMUI 11曝光!华为魔改 Android 11:息屏显示、智慧分屏焕然一新...

    EMUI 11曝光!华为魔改 Android 11:息屏显示.智慧分屏焕然一新 2020-08-29 10:25:30 1点赞 0收藏 0评论 8月28日消息,据国内知名数码博主透露,华为对即将发布的 ...

  6. android11息屏显示,EMUI 11曝光!华为魔改 Android 11:息屏显示、智慧分屏焕然一新...

    8月28日消息,据国内知名数码博主透露,华为对即将发布的全新 EMUI 11 操作系统进行大量魔改,其中包括息屏显示 AOD 设计.应用智慧分屏.系统全面翻译等功能服务,都有非常大的变化,在实用性上也 ...

  7. Android 4.0 截屏(Screenshot)代码流程小结

    Android 4.0 截屏 在Android 4.0 之前,Android手机上如果要使用截屏功能,只能通过Root手机,且使用第3方截图软件来实现截屏功能. Android4.0中,系统自带了截屏 ...

  8. android Q HIDL(小屏显示)

    android Q HIDL(小屏显示) 手机设备上添加了一个小的lcd屏,需求是可以显示文字与图片.且可以在每个应用里面使用,过CTS,那么可供选择的实现方式也就没几种了. (a)过cts的话最好是 ...

  9. Android 4.0 截屏(Screenshot)

    Android 4.0 截屏(Screenshot)代码流程小结 参考文档:Android 4.0 截屏(Screenshot)代码流程小结:http://blog.csdn.net/hk_256/a ...

最新文章

  1. 跟随我在oracle学习php(14)
  2. 电脑屏保海底世界_世界上最后一个深海实验室,隐藏了人类未来的秘密
  3. java bean 转json 串,终于找到了一篇能看懂的如何把javabean转换成json字符串的文章,嘿嘿,分享一下!...
  4. stm32 SPI架构
  5. im4java 文档_im4java学习---阅读documentation文档
  6. VideoLan 0.8.6b test 1
  7. sql如何粘贴一列不同的数值_原来Excel的复制粘贴有这么多不为人知的用法
  8. 高职对计算机课程要求,高职计算机课程对学生编程能力培养.doc
  9. 【机器学习】基于GBDT的数据回归及python实现
  10. rtmp之谷歌浏览器默认启用flash
  11. 摄像头如何被他人控制
  12. PHP自动化代码审计工具
  13. css控制广告位置,CSS固定定位实现右下角可关闭广告
  14. Godot Label 节点
  15. 直播新架构升级:全量支撑淘宝双11直播
  16. android 照片特效,Android使用Gallery实现照片拖动的特效
  17. 计算机图形学 绘制正四面体
  18. 全球主要高光谱遥感卫星介绍
  19. 2018腾讯游戏客户端岗位暑期实习生面试
  20. 上海消费者购房意愿增强 楼市调控满意度提高

热门文章

  1. 南方测绘CASS10.1.5属性面板名称对照表(ArcGIS数据文件SHP转入到CASS绘图环境)
  2. LeetCode 287---Find the Duplicate Number
  3. hadoop一些常用命令
  4. webStorm自动格式化
  5. mysql上年年末_查询年初,年末,去年年初,明年年初与年末sql语句
  6. 192.168.0.0/24是啥意思?
  7. 算法提高 质数的后代
  8. 时代中国三年“老去” 岑钊雄500强空梦一场
  9. 支付宝沙箱环境+SpringBoot+内网穿透整合开发
  10. Oracle存储过程中的for循环