小米OPPO手机小窗或者分屏再恢复全屏,游戏的分辨率触摸异常

小窗事件打印

01-07 11:32:48.604: E/SmallWindowStateHelper(3005): updateSmallWindowPackageName:sSmallWindowPackageName=null sLastValidSmallWindowPackageName=com.test.game
01-07 11:32:48.642: E/AppBackListener(22163): onTopAppChanged newApp=com.test.game,oldApp=com.miui.home,mPersistentApp=null,innerApp=false
01-07 11:32:50.147: E/Layer(991): [Bounds for - com.test.game/com.test.game.GameActivity#0] No local sync point found

Android监听onGlobalLayout

监听到布局改变时,向unity传递消息

private void addGlobalLayoutListener()
{if(mUnityPlayer != null){Log.i("GameActivity", "addGlobalLayoutListener mUnityPlayer != null");mUnityPlayer.getView().getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {public void onGlobalLayout() {resetTouchInputOnLayoutChange();}});}else{Log.e("GameActivity", "addGlobalLayoutListener mUnityPlayer is null!!");}
}

Unity得到Android消息重置分辨率

  1. nScreenWidth + 1,触发update中的调整分辨率
  2. 再还原
public void ResetResolutionOnLayoutChange(){CancelInvoke("FixResolutionCorutine");Invoke("FixResolutionCorutine", 2.0f);//2秒后再触发,避免闪屏}private void FixResolutionCorutine(){nScreenHeight = Screen.currentResolution.height;nScreenWidth = Screen.currentResolution.width;StartCoroutine(FixResolutionWhenReload());}static int nScreenWidth = 0;static int nScreenHeight = 0;IEnumerator FixResolutionWhenReload(){yield return new WaitForSeconds(0.1f);
#if UNITY_ANDROIDScreen.SetResolution(nScreenWidth + 1, nScreenHeight, true);yield return new WaitForSeconds(3f);Screen.SetResolution(nScreenWidth, nScreenHeight, true);
#endif}

Unity Update中修改分辨率

当前分辨率与上次设置不一致时修改

void Update()
{//分辨率调整if (adjustWidth != Screen.currentResolution.width || adjustHeight != Screen.currentResolution.height){ResolutionAdjust();}
}private static int adjustWidth = 0;private static int adjustHeight = 0;private static void ResolutionAdjust(){adjustWidth = Screen.currentResolution.width;adjustHeight = Screen.currentResolution.height;// 对于屏幕有悬浮菜单的手机进行特殊处理,目前只关注1080P的分辨率。if ((adjustWidth >= 1720 && adjustWidth < 1920) || (adjustHeight >= 880 && adjustHeight < 1080)){float aspect = (float)adjustWidth / (float)adjustHeight;adjustHeight = 720;adjustWidth = (int)(aspect * adjustHeight);Screen.SetResolution(adjustWidth, adjustHeight, true);return;}// 对分辨率大于1080P分辨率的手机,强制降到1080P。if (adjustWidth >= 1920 && adjustHeight >= 1080){if (adjustWidth > 1920 || adjustHeight > 1080){float fRatio = (float)adjustWidth / (float)adjustHeight;adjustHeight = 1080;adjustWidth = (int)(fRatio * adjustHeight);Screen.SetResolution(adjustWidth, adjustHeight, true);}}}

Unity3d+Android:分屏小窗还原分辨率触摸异常相关推荐

  1. android分屏模式_Android分屏模式开发注意事项

    Android分屏模式开发注意到主页面在分屏模式下,页面所占比例在增大或者减小的时候都会调用oncreat方法,所以查资料总结一下分屏对页面的生命周期的影响以及开发时的注意事项: App页面从全屏模式 ...

  2. Android分屏功能,适配及相关问题

    Android Developers-开发-API指南-用户界面-多窗口支持: https://developer.android.google.cn/guide/topics/ui/multi-wi ...

  3. android分屏分辨率,Android2.1用罕见15分屏 华为C8600评测

    1000-1500元Android主力 作为国内手机终端销量排名前三名的手机终端厂商,华为一直以来都是国内智能手机的推广者,在1000到1500元价位的Android产品当中,华为C8600一直都享有 ...

  4. Android分屏直播方案,直播软件源码如何在Android端实现多人视频通话

    本篇主要讨论直播软件源码如何在Android端实现多人视频通话.主要需要实现以下功能: 随着加入人数和他们的手机摄像头分辨率的变化,显示不同的UI,即所谓的"分屏" 点击分屏中的小 ...

  5. android 分屏切换流程,一种切换分屏模式和多窗口模式的方法与流程

    本发明涉及一种切换分屏模式和多窗口模式的方法,适用于常见的带有触摸的电子设备,包括但不限于在系统的用户界面中使用触摸的方法进行导航的电子设备. 背景技术: 分屏模式是一种将两个应用扩充到全屏幕的交互方 ...

  6. android分屏模式_Android分屏显示总结

    1. 基础原理 1.1 ActivityRecord.TaskRecord.ActivityStack关系 一个ActivityRecord对应着一个Activity,而一个Activity可能对应着 ...

  7. android分屏资源适配,android7.0分屏适配

    版权声明:本文为原创文章,未经允许不得转载! 一.分屏 进入分屏模式:Android N允许用户一次在屏幕中使用两个App.用户可以左右并排/上下摆放两个App来使用,还可以左右/上下拖拽中间的分割线 ...

  8. android分屏模式_浅谈 Android 7.0 多窗口分屏模式的实现

    从 Android 7.0 开始,Google 推出了一个名为"多窗口模式"的新功能,也就是我们常说的"分屏模式".那么,这个功能有什么用呢?作为开发者,我们又 ...

  9. Android - 分屏模式(多窗口模式)

    简介 在Android N以上设备,可以开启多窗口模式,也叫分屏模式,即在屏幕上可以同时显示多个窗口,这多个窗口可以是不同应用的,也可以是同一个应用的. 禁用分屏 app默认允许分屏,如果想要禁止分屏 ...

最新文章

  1. 两对光纤收发器用网线连接_光纤那么快,路由器和电脑之间为何不用光纤连接,反而用普通网线...
  2. cascade inverse (2010-01-12)
  3. 中小学计算机教室设备维修记录,多媒体电教室的管理与设备的维护
  4. STM32L0开发——ADC多通道采集,IDE和IAR开发注意事项
  5. boost::king_ordering用法的测试程序
  6. 32位网卡驱动 2008_DPDK之网卡收包流程
  7. android弹窗不能手动关闭_vue3.0系列:Vue3自定义PC端弹窗组件V3Layer
  8. 到底梅西和C罗谁更强?分析7年大赛数据后,才知道谁在巅峰
  9. 企业即时通讯最可见的价值是效率和成本
  10. 特斯拉:在行驶20万英里后 其电动汽车电池仍有90%容量
  11. 超级易懂的非递归实现二叉树三种遍历(与网上都不一样)
  12. OpenPDF 或 itext5 根据pdf模板生成多页PDF
  13. 吉吉影音官网版 v2.7.2.8_p2p播放器​
  14. 智能手机射频前端架构初识: Phase 2/3/5/6/6L/7/7L/7LE
  15. ArcGIS Pro 3.0最新消息
  16. OMNeT 例程 Tictoc9 学习笔记
  17. 高通芯片联机读取修改串码 meid ESN wifi 蓝牙 sn等参数的操作解析{二}
  18. 使用机器学习数据集构建销售预测Web应用程序
  19. ubuntu共享文件夹不显示及设备空间不足解决[随手笔记]
  20. 一法通则百法通 佳能照片打印机连供改造

热门文章

  1. 《英雄联盟》手游UI设计分析
  2. windwos下连接安卓模拟器的命令
  3. 扫描功能代码编写_干净的代码编写功能或方法
  4. 《华尔街》:资本主义爱情故事
  5. python滑动验证
  6. 如何将PDF转成Word文档?这里有你想要的答案
  7. Windows 动态磁盘卷:简单卷、跨区卷 、带区卷 、镜像卷 、RAID5卷 相关配置操作
  8. Android和iPhone截屏快捷键
  9. 内蒙古大学计算机学院迎新晚会,@内大萌新 | 请记住此刻的笑颜
  10. matlab程序4名商人,商人们怎样安全过河附MATLAB程序完整.doc