效果图

修改位置

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 视频通话我方视角为矩形相关推荐

  1. Android8.1 MTK平台 修改蓝牙默认名称

    8.1 的默认蓝牙名称为 Android Bluedroid 通过搜索你会找到如下文件 device/generic/common/bluetooth/bdroid_buildcfg.h #ifnde ...

  2. MTK 平台修改或查看USB驱动能力有三种方法

    MTK 平台修改或查看USB驱动能力有三种方法:  1.工模菜单 通过"*#*#3646633#*#*"进入工程模式,通过如下菜单可以查看修改USB驱动能力: hardware t ...

  3. Android8.1 MTK平台 Dialer修改(通话常亮、按钮接听)

    通话保持常亮(不息屏) 在网上搜索的 Android保持屏幕常亮的方法,一种是 getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SC ...

  4. Android8.1 MTK平台 Dialer修改(来电全屏、归属地显示)

    来电默认全屏 默认情况下,来电android是以通知窗口的形式显示,只在屏幕的顶部显示,现在改为全屏显示 修改位置 alps\vendor\mediatek\proprietary\packages\ ...

  5. android 改变来电号码,Android8.1 MTK平台 Dialer修改(来电全屏、归属地显示)

    来电默认全屏 默认情况下,来电android是以通知窗口的形式显示,只在屏幕的顶部显示,现在改为全屏显示 修改位置 alps\vendor\mediatek\proprietary\packages\ ...

  6. Android8.1 MTK 平台 Launcher3 修改定制

    一.去掉默认 Google 搜索栏 修改位置 vendor\mediatek\proprietary\packages\apps\Launcher3\src\com\android\launcher3 ...

  7. Android8.1 MTK平台 系统需求定制

    1.清空短信记录接口 vendor\mediatek\proprietary\packages\apps\Mms\src\com\android\mms\transaction\NoneService ...

  8. MTK平台修改开机动画,开机logo

    修改开机logo 找到目录 trunk/mediatek/custom/common/lk/logo/ 该目录下面有很多的文件夹,都是在不同分辨率下面的logo 要修改的话就看需要修改哪个分辨律下面的 ...

  9. MTK平台修改Android动画,Android MTK平台修改开关机动画和开机logo

    转载请注明出处:http://blog.csdn.net/u011479494/article/details/50682089 一.修改开机logo 由于我的机器分辨率为540*960 替换:med ...

最新文章

  1. 【Codeforces】401C Team (01010110...)
  2. Confluence 6 指派和撤销空间权限
  3. ISA2006标准版配置导入企业版
  4. SSH框架中 Spring设置定时器 Quartz
  5. Java-工具类之发送邮件
  6. linux之shell
  7. P4151 [WC2011]最大XOR和路径(线性基)
  8. 争议?MySQL存储过程与函数,封装,体,完整详细可收藏
  9. Python3 爬虫学习笔记 C17【爬虫框架 pyspider — 基本使用】
  10. redis客户端-服务端协议(RESP协议)
  11. service获取selinux权限_属性问题展开的selinux权限介绍
  12. 网站代码有服务器系统限制吗,服务器内存最大大小限制(示例代码)
  13. js 随机数_JS常用方法和一些封装:随机数生成
  14. node 获取表单数据 为空_寻offer之JS数据结构与算法 -- 栈
  15. 如何用xilinx sdk输出hello world
  16. (转自MBA智库百科)弗兰克·吉尔布雷斯
  17. java更改exif信息_照片EXIF信息的读取和改写的JAVA实现
  18. 服务器3D场景建模(三):体素场景(一)
  19. PPT无法打开,打开后总是修复的解决方法
  20. 一个去除pdf回车符的网页

热门文章

  1. 大数据学习——HDFS退役旧数据节点
  2. 入手级仿真软件和编辑器安装(VIVADO)
  3. UnkownhostException:wwx.wwx.cn
  4. 中机60年,引领中国工业走进智能门户云平台时代|中机智库
  5. cad打印去掉边框_win7系统怎么去掉CAD打印图纸时图框的白边
  6. jQurey入门以及选择器
  7. 控制系统Matlab仿真——校正
  8. 一稻箩的官帽nbsp;-nbsp;本村施姓的传说
  9. mac mysql my.cnf 路径_my.cnf文件在macOS上的位置
  10. 前端基础——HTML、CSS