移动视频开发中横竖屏转换遇到的BUG(Android)

剧情铺垫:首先申明,我是一个Android初学者。最开始我们想做一个视频通话软件,很快就找到了AnyChat。但当时用的是官网的demo,只支持横屏。我们想做成横竖屏都支持的效果。

遇到的问题
1、自己的视频会被对方的视频挡住
2、自己的视频横竖比例不对
3、自己的视频将音量条挡住
4、自己的视频不能居中

问题1的处理
尝试1:由于较熟悉web方面的知识,最先想到用z-index控制View的叠放,结果悲剧的没找到z-index类似物
尝试2:Android中,xml排在后的会覆盖排在前的,但这么做不起作用
尝试3:SurfaceView是一种特殊的View,默认下会显示在普通View后,通过 myView.setZOrderOnTop(true); 可设置SurfaceView到顶层
问题解决!


问题2的处理
这个相对简单,直接贴代码:
private void adjuestVideoSize(int width, int height, Configuration config) {
            ConfigEntity configEntity = ConfigService.LoadConfig(this);
            float rWidth = configEntity.resolution_width;
            float rHeight = configEntity.resolution_height;
            if(config.orientation == Configuration.ORIENTATION_PORTRAIT) {
                    rWidth = configEntity.resolution_height;
                rHeight = configEntity.resolution_width;
            }
        if (rHeight * width > rWidth * height) {
                dwLocalVideoHeight = height;
                dwLocalVideoWidth = (int)(rWidth / rHeight * dwLocalVideoHeight);
        } else {
                dwLocalVideoWidth = width;
                dwLocalVideoHeight = (int)(rHeight / rWidth * dwLocalVideoWidth);
        }
        FrameLayout.LayoutParams layoutParamSelf=new FrameLayout.LayoutParams(dwLocalVideoWidth, dwLocalVideoHeight);
        myView.setLayoutParams(layoutParamSelf);
}

Android设备配置信息都放在ConfigEntity这个类中,包括摄像头的分辨率


问题3的处理
处理完第一个问题后,音量条被SurfaceView挡住了,这是由于UI布局的问题
只要设置SurfaceView外的FrameLayout
android:layout_height="0dip"
android:layout_weight=“1"
说明:weight指的是剩余空间的权重,所以FrameLayout的高度是0+剩余部分的100%,就不会覆盖音量条的部分



问题4的处理
SurfaceView外部的FrameLayout设置属性:android:layout_gravity="center"
但每次都是左上角对齐


实际是在执行下面这句时改变了对齐方式
FrameLayout.LayoutParams layoutParamSelf=new FrameLayout.LayoutParams(dwLocalVideoWidth, dwLocalVideoHeight);


加个参数就OK了,Gravity.CENTER
FrameLayout.LayoutParams layoutParamSelf=new FrameLayout.LayoutParams(dwLocalVideoWidth, dwLocalVideoHeight, Gravity.CENTER);


鸣谢
最后感谢AnyChat的开发人员,在我处理问题的过程中帮了很大的忙,大家如果有需要也可以去他们官网下载damo免费测试的哈www.anychat.cn

移动视频开发中横竖屏转换遇到的BUG(Android),布布扣,bubuko.com

移动视频开发中横竖屏转换遇到的BUG(Android)

上一篇:MySQL数据库中索引的数据结构是什么?(B树和B+树的区别)


下一篇:NOIP2018 - 暑期博客整理