移动视频开发中横竖屏转换遇到的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)

时间: 2024-08-05 22:03:16

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

ios开发强制横竖屏转换

第一种:手动的设置界面元素的旋转,包括状态栏.导航栏和视图.以下代码为从竖屏设置为横屏,坐标系是以竖屏的为基准,所以会出现负数的坐标值. //设置状态栏旋转 [[UIApplication sharedApplication] setStatusBarOrientation:UIDeviceOrientationLandscapeRightanimated:YES]; CGFloat duration = [UIApplication sharedApplication].statusBarOr

(一〇八)iPad开发之横竖屏适配

在iPad开发中,横竖屏的视图常常是不同的,例如侧边栏Dock,在横屏时用于屏幕较宽,可以展示足够多的内容,每个按钮都可以展示出标题:而竖屏时Dock应该比较窄,只显示图标不现实按钮标题. iPad比较重要的知识是不同类型设备的宽高在以点为单位的图形坐标系下固定为768x1024,因此常常利用此值来判断横竖屏. 768.1024.横竖屏判断很常用,可以定义一个公共的常量文件来放这些内容. [常量和宏的定义] ①在.m文件中,定义变量,加上const,注意指针(例如NSString*)使用的是常量

cocos2d-x游戏开发屏幕横竖屏切换

android解决方案: 1.在游戏的主activity中编写一个静态方法(继承Cocos2dxActivity) public static void changedActivityOrientation(int orientation){ switch(orientation) { case 1://横屏 instance.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); break; case 2://竖

iOS iPad开发之横竖屏适配

1. 做横竖屏适配的时,需要判断当前状态是横屏还是竖屏,有两种方法: 第1种:[UIScreen mainScreen].bounds.size.width == 768 优点:把这个抽成宏之后,随时可以判断横竖屏, #define Lanscape ([UIScreen mainScreen].bounds.size.width == 768) 缺点:只在iOS8可行,也就是说在iOS8中横屏的width=1024,竖屏的width=768; 而在iOS7上,横竖屏的width=768 第2种

ios开发中的矩阵转换

最近在研究CoreText看了很多的例子其中有很多地方不是特别理解所以上网收集了IOS矩阵的转换原理来记录下 本文转载自:http://blog.csdn.net/lamp_zy/article/details/8474818 CGAffineTransformMake(a,b,c,d,tx,ty) ad缩放bc旋转tx,ty位移,基础的2D矩阵 公式 x=ax+cy+tx    y=bx+dy+ty 1.矩阵的基本知识: struct CGAffineTransform {  CGFloat

Android开发中出现的低级错误之没有android jar包

The type java.lang.Object cannot be resolved. It is indirectly referenced from required .class files 解决办法:相应的系统的jar包没有导入:选add External JARs...,添加android.jar. 为什么导入工程时候,android.jar包没有导入进来?现象就是所有工程都有问题. 解决办法:在系统的环境变量Path中增加E:\adt-bundle-windows-x86-201

Android开发中遇到的问题(五)——Eclipse导入Android项目出现"Invalid project description overlaps the location of another project"错误的解决办法

一.错误描述 使用如下的命令手动创建一个Android项目 android create project -n LinearLayoutTest -t 1 -p E:/Android/workspace/LinearLayoutTest -k me.gacl.ui -a MainActivity 命令执行完成之后就会在E:/Android/workspace目录下创建一个名字为LinearLayoutTest的Android项目,如下图所示: E:/Android/workspace目录就是我的

Android开发中遇到的问题(三)——eclipse创建android项目无法正常预览布局文件

一.问题描述 今天使用SDK Manager将Android SDK的版本更新到了Android 5.1的版本,eclipse创建android项目时,预览activity_main.xml文件时提示: This version of the rendering library is more recent than your version of ADT plug-in. Please update ADT plug-in,导致无法正常预览布局文件,现象如下图所示: 上网查了一下原因,问题根源

相机开发(聚焦、横竖屏拍照、照片存储、连续拍照等)

近期项目用到了相机拍照的功能,于是想着封装好一些通用性较好的相机调用,从百度和谷歌上查找出来的资料真的印证了"天下文章一大抄"的道理,并且它们实现的拍照功能大都存在缺陷,如聚焦问题.反复拍照问题.照片存储问题.横竖屏转换问题.一大堆的问题,并且程序的扩展性和可重用性实在不敢恭维,排版级其混乱. 最后无奈,打开API文档camera相机类,从最基础的学起,然后自己进行改进,从这里也告诉我们一个道理,API文档才是学习起点,由于它会告诉你整个实现的原理和原因,可以对整个框架有一个总体的了解