Android8.1 MTK平台 修改 Volte 视频通话我方视角为矩形
发布日期:2021-06-29 13:08:05 浏览次数:2 分类:技术文章

本文共 2082 字,大约阅读时间需要 6 分钟。

效果图

在这里插入图片描述

修改位置

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() {      @Override      public 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

96dp
118dp

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() {    @Override    public 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 相关的知识可看

转载地址:https://cczheng.blog.csdn.net/article/details/89881033 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Android8.1 MTK平台 SystemUI源码分析之 Notification流程
下一篇:Android 8.1平台SystemUI 导航栏加载流程解析

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年05月02日 06时17分20秒