Android SurfaceView播放视频时横竖屏的调整

对于横屏录制的视频就横屏播放,对于竖屏录制的视频就竖屏播放。

在mainifest文件里对负责播放的Activity添加以下属性“

    android:configChanges="orientation|keyboardHidden|screenSize"

重写Acitivity的onConfigurationChanged方法:

    @Override
        public void onConfigurationChanged(Configuration newConfig) {
            super.onConfigurationChanged(newConfig);

        }

根据视频的属性来区分:

    @Override
        public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
            if (width == 0 || height == 0) {
                Log.e(TAG, "invalid video width(" + width + ") or height(" + height
                        + ")");
                return;
            }
            Logger.d(TAG, "onVideoSizeChanged width:" + width + " height:" + height);
            mIsVideoSizeKnown = true;
            mVideoHeight = height;
            mVideoWidth = width;
            int wid = mMediaPlayer.getVideoWidth();
            int hig = mMediaPlayer.getVideoHeight();
            // 根据视频的属性调整其显示的模式

            if (wid > hig) {
                if (getRequestedOrientation() != ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {
                    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
                }
            } else {
                if (getRequestedOrientation() != ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) {
                    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
                }
            }
            DisplayMetrics dm = new DisplayMetrics();
            getWindowManager().getDefaultDisplay().getMetrics(dm);
            mSurfaceViewWidth = dm.widthPixels;
            mSurfaceViewHeight = dm.heightPixels;
            if (width > height) {
                // 竖屏录制的视频,调节其上下的空余

                int w = mSurfaceViewHeight * width / height;
                int margin = (mSurfaceViewWidth - w) / 2;
                Logger.d(TAG, "margin:" + margin);
                RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
                        RelativeLayout.LayoutParams.MATCH_PARENT,
                        RelativeLayout.LayoutParams.MATCH_PARENT);
                lp.setMargins(margin, 0, margin, 0);
                mSurfaceView.setLayoutParams(lp);
            } else {
                // 横屏录制的视频,调节其左右的空余

                int h = mSurfaceViewWidth * height / width;
                int margin = (mSurfaceViewHeight - h) / 2;
                Logger.d(TAG, "margin:" + margin);
                RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
                        RelativeLayout.LayoutParams.MATCH_PARENT,
                        RelativeLayout.LayoutParams.MATCH_PARENT);
                lp.setMargins(0, margin, 0, margin);
                mSurfaceView.setLayoutParams(lp);
            }
        }
时间: 2024-07-29 23:40:45

Android SurfaceView播放视频时横竖屏的调整的相关文章

Android SurfaceView播放视频

先来介绍一下大部分软件如何解析一段视频流.首先它需要先确定视频的格式,这个和解码相关, 不同的格式视频编码不同,不是这里的重点.知道了视频的编码格式后,再通过编码格式进行解码,最后得到一帧一帧的图像,并把这些图像快速的显示在界面上, 即为播放一段视频.SurfaceView在Android中就是完成这个功能的. IBM POWER8通过一年充分融入了"开放"基因,现在有哪些成效?快来注册观看直播,一起拥抱开源的力量. --> SurfaceView 先来介绍一下大部分软件如何解析

请教:Android正播放视频时的解码输出流如何获取?

============问题描述============ Android播放视频,经过解码器解码 获得数据流 再显示到屏幕上.请问这部分数据(解码器解码后的数据流)通过什么方法可以获取?  请教...  先谢谢啦 ============解决方案1============ 你是想录制视频? ============解决方案2============ 引用 3 楼 yu8fei 的回复: Quote: 引用 2 楼 sagittarius1988 的回复: 你是想录制视频? 不是,跟照相机录像机摄

Android WebView播放视频(包括全屏播放)

最近项目开发中用到了WebView播放视频的功能,总结了开发中犯过的错误,这些错误在开发是及容易遇到的,所以我这里总结了一下,希望大家看到后不要再犯类似的错误,尽可能提高开发效率: 这个Demo我这里也参考了网上写的一个比较好的一个Demo,经过总结修改,写出来的. 以下是相应代码: MainActivity: package com.androidwebviewdemo; import android.app.Activity; import android.app.ProgressDialo

Android开发之MediaPlayer和SurfaceView播放视频

使用MediaPlayer出了了可以播放音频之外,还可以播放视频文件,只不过使用MediaPlayer播放视频时,没有提供图像输出界面.可以使用SurfaceView组件来显示视频图像.使用MediaPlayer和SurfaceView播放视频大致可以分为如下四个步骤: 1)定义SurfaceView组件.最好在布局文件中实现. 2)创建MediaPlayer对象,并为其加载要播放的视频. 3)将所播放的视频画面输出到SurfaceView中.使用MediaPlayer对象的setDisplay

【iOS开发】解决“点击MPMoviePlayerController播放视频时,出现一个黑屏闪屏问题”

当点击某按钮播放视频时,如果在按钮触发函数时alloc MPMoviePlayerController对象,同时加载资源文件,因为加载资源文件也需要时间,这时会有一个短暂的黑色闪屏,这点体验很不好,有一个好的解决方案是,提前alloc预加载好该MoviePlayer对象,点击按钮时直接调用play. 预加载相关代码: //预加载视频,避免出现黑屏 NSString *videoPath=[[NSBundle mainBundle]pathForResource:@"startVideo"

Android黑屏死机--充电运行土豆视频【.4.4】》播放视频中黑屏死机》手动按电源键开机显示电量为6%

[测试版本] T0405 [测试模块] [测试步骤] 充电运行土豆视频[.4.4]> [测试结果]播放视频中黑屏死机>手动按电源键开机显示电量为6%[开机后恢复] [预期结果]可正常播放 分析: 从测试提供的描述突然黑屏死机,并且是在电量低的情况,也有可能是直接掉电了,下面就来分析下log 从第二份last_kmsg LOG 中可以明显的看到: [ 206.423069]<0>.(0)[160:kpoc_charger]******** MT auxadc driver shutd

Android实现播放视频

转载:http://www.bdqn.cn/news/201311/12100.shtml 使用VideoView播放视频 VideoView,用于播放一段视频媒体,它继承了SurfaceView,位于"android.widget.VideoView",是一个视频控件. 既然是播放一段视频,那么不可避免的要涉及到一些开始.暂停.停止等操作,VideoView也为开发人员提供了对应的方法,这里简单介绍一些常用的: int getCurrentPosition():获取当前播放的位置.

取消苹果手机播放视频自动全屏

iphone苹果手机上用html5的video方式播放视频时,在ipad上是默认原来大小的,而在iphone上是默认全屏播放的. 解决办法: HTML里video必须加上webkit-playsinline属性 <video id="player" width="480" height="320" webkit-playsinline> end

DragVideo,一种在播放视频时,可以任意拖拽的方案

转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/53638896 前言 项目已开源到我的github: https://github.com/hejunlin2013/DragVideo DragVideo A Method to Drag the Video When Playing Video 一种在播放视频时,能够拖拽的方案 为什么有这个工程 经常在爱奇艺网站上看电影,看到如