设为首页收藏本站

AnyChat技术支持论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 3577|回复: 2
打印 上一主题 下一主题

处理Android下AnyChat支持横竖屏中遇到的bug

[复制链接]

1

主题

2

帖子

13

积分

新手上路

Rank: 1

积分
13
跳转到指定楼层
楼主
发表于 2014-8-12 19:43:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
剧情铺垫首先申明,我是一个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的开发人员,在我处理问题的过程中帮了很大的忙
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

1

主题

2

帖子

13

积分

新手上路

Rank: 1

积分
13
沙发
 楼主| 发表于 2014-8-12 19:53:45 | 只看该作者
图片貌似上传不了大概是这样的
横屏
________________
|            |             |
|            |             |
|            |             |
|_______|_______|

竖屏
____________
|                   |
|                   |
|           ____ |
|          |        |
|          |        |
|______|____|
回复 支持 反对

使用道具 举报

249

主题

2967

帖子

9101

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
9101
板凳
发表于 2014-8-12 22:30:27 | 只看该作者
您好,另外一个示例程序:AnyChatCallCenter是支持屏幕切换的,是否可以满足您的需求?
您重新编辑一下帖子,就可以上传图片了,谢谢!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|AnyChat ( 粤ICP备13022410号-1 )  

GMT+8, 2024-9-28 01:31 , Processed in 0.127307 second(s), 21 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表