Android8.1 MTK平台 修改 Volte 视频通话我方视角为矩形
效果图
修改位置
vendor\mediatek\proprietary\packages\apps\Dialer\java\com\android\incallui\video\impl\VideoCallFragment.java
直接注释掉 onCreateView() 中的 previewTextureView.setClipToOutline(true);这行代码,没错就是这么的简单粗暴就搞定了
public View onCreateView(LayoutInflater layoutInflater, @Nullable ViewGroup viewGroup, @Nullable Bundle bundle) {LogUtil.i("VideoCallFragment.onCreateView", null);
.....endCallButton.setOnClickListener(this);previewTextureView = (TextureView) view.findViewById(R.id.videocall_video_preview);//previewTextureView.setClipToOutline(true);previewOffOverlay.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {checkCameraPermission();}});
...
}
为了美观,我们可以把矩形框以16:9的黄金比例缩放一下,并将我方预览矩形框移至右上角
vendor\mediatek\proprietary\packages\apps\Dialer\java\com\android\incallui\video\impl\res\layout\frag_videocall.xml
vendor\mediatek\proprietary\packages\apps\Dialer\java\com\android\incallui\video\impl\res\values\dimens.xml
<TextureView
android:id="@+id/videocall_video_preview"
android:layout_width="@dimen/videocall_preview_width"
android:layout_height="@dimen/videocall_preview_height"
android:layout_marginTop="@dimen/videocall_preview_margin_bottom"
android:layout_marginEnd="@dimen/videocall_preview_margin_start"
android:layout_alignParentRight="true"
android:importantForAccessibility="no"/><resources><dimen name="videocall_preview_width">96dp</dimen><dimen name="videocall_preview_height">118dp</dimen>
</resources>
ok,这样就完成了产品经理的需求了。接下来,盘它,分析一下代码为啥注释掉这一行就能达到目标呢?
代码分析
先从UI入手,还是借用 工具找到对应的id videocall_video_preview,搜索发现有两处,
分别位于 frag_videocall.xml 和 frag_videocall_surfaceview.xml, 点进去确实发现里面对应的
videocall_video_preview 分别为 TextureView 和 SurfaceView,此处用到的是 TextureView,
在对应的 VideoCallFragment.java 中加载布局,可以看到dimens.xml中对应的宽高都为 72dp,那应该是一个正方形才对
由此猜想肯定是在 java 代码中进行了修改,带着疑问看到 VideoCallFragment 中
previewTextureView.setClipToOutline(true);previewTextureView.setOutlineProvider(circleOutlineProvider);private final ViewOutlineProvider circleOutlineProvider =new ViewOutlineProvider() {@Overridepublic void getOutline(View view, Outline outline) {int x = view.getWidth() / 2;int y = view.getHeight() / 2;int radius = Math.min(x, y);outline.setOval(x - radius, y - radius, x + radius, y + radius);}};
以上代码是我精简组合后的关键代码,google工程师就是通过 setClipToOutline(true) 裁剪来实现圆角的,需要注意的是
setClipToOutline 和 setOutlineProvider 需要搭配使用,默认 ClipeToOutLine 是false的,这就是为什么注释了
previewTextureView.setClipToOutline(true) 就达到了我们的预期。
关于 setClipToOutline 相关的知识可看这篇
Android8.1 MTK平台 修改 Volte 视频通话我方视角为矩形相关推荐
- Android8.1 MTK平台 修改蓝牙默认名称
8.1 的默认蓝牙名称为 Android Bluedroid 通过搜索你会找到如下文件 device/generic/common/bluetooth/bdroid_buildcfg.h #ifnde ...
- MTK 平台修改或查看USB驱动能力有三种方法
MTK 平台修改或查看USB驱动能力有三种方法: 1.工模菜单 通过"*#*#3646633#*#*"进入工程模式,通过如下菜单可以查看修改USB驱动能力: hardware t ...
- Android8.1 MTK平台 Dialer修改(通话常亮、按钮接听)
通话保持常亮(不息屏) 在网上搜索的 Android保持屏幕常亮的方法,一种是 getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SC ...
- Android8.1 MTK平台 Dialer修改(来电全屏、归属地显示)
来电默认全屏 默认情况下,来电android是以通知窗口的形式显示,只在屏幕的顶部显示,现在改为全屏显示 修改位置 alps\vendor\mediatek\proprietary\packages\ ...
- android 改变来电号码,Android8.1 MTK平台 Dialer修改(来电全屏、归属地显示)
来电默认全屏 默认情况下,来电android是以通知窗口的形式显示,只在屏幕的顶部显示,现在改为全屏显示 修改位置 alps\vendor\mediatek\proprietary\packages\ ...
- Android8.1 MTK 平台 Launcher3 修改定制
一.去掉默认 Google 搜索栏 修改位置 vendor\mediatek\proprietary\packages\apps\Launcher3\src\com\android\launcher3 ...
- Android8.1 MTK平台 系统需求定制
1.清空短信记录接口 vendor\mediatek\proprietary\packages\apps\Mms\src\com\android\mms\transaction\NoneService ...
- MTK平台修改开机动画,开机logo
修改开机logo 找到目录 trunk/mediatek/custom/common/lk/logo/ 该目录下面有很多的文件夹,都是在不同分辨率下面的logo 要修改的话就看需要修改哪个分辨律下面的 ...
- MTK平台修改Android动画,Android MTK平台修改开关机动画和开机logo
转载请注明出处:http://blog.csdn.net/u011479494/article/details/50682089 一.修改开机logo 由于我的机器分辨率为540*960 替换:med ...
最新文章
- 【Codeforces】401C Team (01010110...)
- Confluence 6 指派和撤销空间权限
- ISA2006标准版配置导入企业版
- SSH框架中 Spring设置定时器 Quartz
- Java-工具类之发送邮件
- linux之shell
- P4151 [WC2011]最大XOR和路径(线性基)
- 争议?MySQL存储过程与函数,封装,体,完整详细可收藏
- Python3 爬虫学习笔记 C17【爬虫框架 pyspider — 基本使用】
- redis客户端-服务端协议(RESP协议)
- service获取selinux权限_属性问题展开的selinux权限介绍
- 网站代码有服务器系统限制吗,服务器内存最大大小限制(示例代码)
- js 随机数_JS常用方法和一些封装:随机数生成
- node 获取表单数据 为空_寻offer之JS数据结构与算法 -- 栈
- 如何用xilinx sdk输出hello world
- (转自MBA智库百科)弗兰克·吉尔布雷斯
- java更改exif信息_照片EXIF信息的读取和改写的JAVA实现
- 服务器3D场景建模(三):体素场景(一)
- PPT无法打开,打开后总是修复的解决方法
- 一个去除pdf回车符的网页
热门文章
- 大数据学习——HDFS退役旧数据节点
- 入手级仿真软件和编辑器安装(VIVADO)
- UnkownhostException:wwx.wwx.cn
- 中机60年,引领中国工业走进智能门户云平台时代|中机智库
- cad打印去掉边框_win7系统怎么去掉CAD打印图纸时图框的白边
- jQurey入门以及选择器
- 控制系统Matlab仿真——校正
- 一稻箩的官帽nbsp;-nbsp;本村施姓的传说
- mac mysql my.cnf 路径_my.cnf文件在macOS上的位置
- 前端基础——HTML、CSS