Android中关于如何限制上层应用只在特定区间画图

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android中关于如何限制上层应用只在特定区间画图相关的知识,希望对你有一定的参考价值。

android中关于如何限制上层应用只在特定区间画图

有时候对于mtk开发中有一个很特殊的需求。
那就是mtk的手机平台不支持横屏模式的display panel屏幕,只支持竖屏。
mtk的平板平台才支持横屏扫描的屏幕。这个可能是mtk两个部门之间的策略规定。
其他rockchip、高通平台没有这种限制。
如果你需要用mtk手机平台开发横屏扫描的屏幕(注意不是竖屏横着用,这是另外一种情况,竖屏横着用,显然mtk手机平台直接就支持)。

于是,你的解决办法是,在驱动侧,把480240的横屏,驱动侧给mtk的mipi信息,故意改为480640的竖屏,但是屏幕其实是横屏,所以clock故意按照480*640分辨率来计算。再做微调clock频率,保证显示是正确的。

然后你看到屏幕显示只是480640的上面部分,因为屏幕实际只有480240。
而你返回给android上层的分辨率是480640的。
为此,为了让上层应用只知道屏幕只有480240,那么你需要修改如下地方:

对应mtk Android L:修改:
frameworks/native/services/surfaceflinger/DisplayHardware/HWComposer.cpp
queryDisplayProperties()函数的
case HWC_DISPLAY_WIDTH 设置的config.width = 480;
case HWC_DISPLAY_HEIGHT 设置的config.height = 240;

对于mtk Android O(android 8.1)代码:修改
frameworks/native/services/surfaceflinger/DisplayHardware/HWC2.cpp
Display::loadConfig()函数中,
.setWidth(480)
.setHeight(240)

说白了,就是上层surfaceflinger获取display hardware属性时,故意告诉他另外的分辨率480*240,这样surfaceflinger在画图时,就按照这个目标display分辨率就行render merge了。从而实现显示效果。

另外我的相关培训视频请看:
欢迎观看我发布的各个课程: https://edu.51cto.com/lecturer/8896847.html
内含免费视频。

以上是关于Android中关于如何限制上层应用只在特定区间画图的主要内容,如果未能解决你的问题,请参考以下文章

如何将两种不同的样式应用于android中的一个元素?

利用PorterDuffXfermode绘制图片文字

在Android Studio中关闭手机上的应用程序时如何不关闭套接字

如何限制Android中的输入数字长度?

ORACLE中关于使用between取不同的区间值和取反

如何使用 google maps api for android 将地图限制在一个国家/地区