Android8.1 MTK平台 修改 Volte 视频通话我方视角为矩形

简介: Android8.1 MTK平台 修改 Volte 视频通话我方视角为矩形

效果图



20190506134550407.png

修改位置


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

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

目录
相关文章
|
3月前
|
监控 Android开发 数据安全/隐私保护
批量发送短信的平台,安卓群发短信工具插件脚本,批量群发短信软件【autojs版】
这个Auto.js脚本实现了完整的批量短信发送功能,包含联系人管理、短信内容编辑、发送状态监控等功能
|
12月前
|
Java Android开发 Swift
安卓与iOS开发对比:平台选择对项目成功的影响
【10月更文挑战第4天】在移动应用开发的世界中,选择合适的平台是至关重要的。本文将深入探讨安卓和iOS两大主流平台的开发环境、用户基础、市场份额和开发成本等方面的差异,并分析这些差异如何影响项目的最终成果。通过比较这两个平台的优势与挑战,开发者可以更好地决定哪个平台更适合他们的项目需求。
278 1
|
IDE Android开发 iOS开发
探索Android与iOS开发的差异:平台选择对项目成功的影响
【9月更文挑战第27天】在移动应用开发的世界中,Android和iOS是两个主要的操作系统平台。每个系统都有其独特的开发环境、工具和用户群体。本文将深入探讨这两个平台的关键差异点,并分析这些差异如何影响应用的性能、用户体验和最终的市场表现。通过对比分析,我们将揭示选择正确的开发平台对于确保项目成功的重要作用。
|
7月前
|
存储 编解码 监控
Android平台GB28181执法记录仪技术方案与实现
本文介绍了大牛直播SDK的SmartGBD在执法记录仪场景中的应用。GB28181协议作为视频监控联网的国家标准,为设备互联互通提供规范。SmartGBD专为Android平台设计,支持音视频采集、编码与传输,具备自适应算法和多功能扩展优势。文章分析了执法记录仪的需求,如实时音视频传输、设备管理及数据安全,并详细阐述了基于SmartGBD的技术实现方案,包括环境准备、SDK集成、设备注册、音视频处理及功能扩展等步骤。最后展望了SmartGBD在未来智慧物联领域的广阔应用前景。
276 13
|
7月前
|
存储 编解码 开发工具
Android平台毫秒级低延迟HTTP-FLV直播播放器技术探究与实现
本文详细探讨了在Android平台上实现HTTP-FLV播放器的过程。首先介绍了FLV格式的基础,包括文件头和标签结构。接着分析了HTTP-FLV传输原理,通过分块传输实现流畅播放。然后重点讲解了播放器的实现步骤,涵盖网络请求、数据解析、音视频解码与渲染,以及播放控制功能的设计。文章还讨论了性能优化和网络异常处理的方法,并总结了HTTP-FLV播放器的技术价值,尤其是在特定场景下的应用意义。
264 11
|
7月前
|
监控 Shell Linux
Android调试终极指南:ADB安装+多设备连接+ANR日志抓取全流程解析,覆盖环境变量配置/多设备调试/ANR日志分析全流程,附Win/Mac/Linux三平台解决方案
ADB(Android Debug Bridge)是安卓开发中的重要工具,用于连接电脑与安卓设备,实现文件传输、应用管理、日志抓取等功能。本文介绍了 ADB 的基本概念、安装配置及常用命令。包括:1) 基本命令如 `adb version` 和 `adb devices`;2) 权限操作如 `adb root` 和 `adb shell`;3) APK 操作如安装、卸载应用;4) 文件传输如 `adb push` 和 `adb pull`;5) 日志记录如 `adb logcat`;6) 系统信息获取如屏幕截图和录屏。通过这些功能,用户可高效调试和管理安卓设备。
|
10月前
|
IDE 开发工具 Android开发
移动应用开发之旅:探索Android和iOS平台
在这篇文章中,我们将深入探讨移动应用开发的两个主要平台——Android和iOS。我们将了解它们的操作系统、开发环境和工具,并通过代码示例展示如何在这两个平台上创建一个简单的“Hello World”应用。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和技巧,帮助你更好地理解和掌握移动应用开发。
244 17
|
12月前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
383 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
监控 Android开发 iOS开发
深入探索安卓与iOS的系统架构差异:理解两大移动平台的技术根基在移动技术日新月异的今天,安卓和iOS作为市场上最为流行的两个操作系统,各自拥有独特的技术特性和庞大的用户基础。本文将深入探讨这两个平台的系统架构差异,揭示它们如何支撑起各自的生态系统,并影响着全球数亿用户的使用体验。
本文通过对比分析安卓和iOS的系统架构,揭示了这两个平台在设计理念、安全性、用户体验和技术生态上的根本区别。不同于常规的技术综述,本文以深入浅出的方式,带领读者理解这些差异是如何影响应用开发、用户选择和市场趋势的。通过梳理历史脉络和未来展望,本文旨在为开发者、用户以及行业分析师提供有价值的见解,帮助大家更好地把握移动技术发展的脉络。
699 6
|
存储 Java 编译器
🔍深入Android底层,揭秘JVM与ART的奥秘,性能优化新视角!🔬
【9月更文挑战第12天】在Android开发领域,深入了解其底层机制对提升应用性能至关重要。本文详述了从早期Dalvik虚拟机到现今Android Runtime(ART)的演变过程,揭示了ART通过预编译技术实现更快启动速度和更高执行效率的奥秘。文中还介绍了ART的编译器与运行时环境,并提出了减少DEX文件数量、优化代码结构及合理管理内存等多种性能优化策略。通过掌握这些知识,开发者可以从全新的角度提升应用性能。
285 11

热门文章

最新文章