JAVA不能满屏_java – 全屏幕视频,不拉伸视频

像这样,你可以自己设置视频的属性。

使用SurfaceView(给你更多的视图控制),将其设置为fill_parent以匹配整个屏幕

android:orientation="vertical"

android:layout_width="match_parent"

android:layout_height="fill_parent">

android:id="@+id/surfaceViewFrame"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:layout_gravity="center" >

然后在您的java代码获取表面视图并添加您的媒体播放器

surfaceViewFrame = (SurfaceView) findViewById(R.id.surfaceViewFrame);

player = new MediaPlayer();

player.setDisplay(holder);

在您的媒体播放器上设置一个onPreparedListener,并手动计算视频的所需大小,以期望的比例填充屏幕,避免视频播放!

player.setOnPreparedListener(new OnPreparedListener() {

@Override

public void onPrepared(MediaPlayer mp) {

// Adjust the size of the video

// so it fits on the screen

int videoWidth = player.getVideoWidth();

int videoHeight = player.getVideoHeight();

float videoProportion = (float) videoWidth / (float) videoHeight;

int screenWidth = getWindowManager().getDefaultDisplay().getWidth();

int screenHeight = getWindowManager().getDefaultDisplay().getHeight();

float screenProportion = (float) screenWidth / (float) screenHeight;

android.view.ViewGroup.LayoutParams lp = surfaceViewFrame.getLayoutParams();

if (videoProportion > screenProportion) {

lp.width = screenWidth;

lp.height = (int) ((float) screenWidth / videoProportion);

} else {

lp.width = (int) (videoProportion * (float) screenHeight);

lp.height = screenHeight;

}

surfaceViewFrame.setLayoutParams(lp);

if (!player.isPlaying()) {

player.start();

}

}

});

我从一段时间以前跟踪的视频流教程修改了这个,现在找不到它来引用它,如果有人请添加链接到答案!

希望有帮助!

编辑

好的,所以,如果你想让视频占据整个屏幕,你不希望它伸展,最终会出现黑色的条纹。在我发布的代码中,我们发现更大,视频或手机屏幕是最好的方式。

在那里,您有完整的活动,从链接流式传输视频。它的100%功能。我不能告诉你如何从自己的设备播放视频,因为我不知道。我相信你会在文档here或here中找到它。

public class VideoPlayer extends Activity implements Callback, OnPreparedListener, OnCompletionListener,

OnClickListener {

private SurfaceView surfaceViewFrame;

private static final String TAG = "VideoPlayer";

private SurfaceHolder holder;

private ProgressBar progressBarWait;

private ImageView pause;

private MediaPlayer player;

private Timer updateTimer;

String video_uri = "http://daily3gp.com/vids/familyguy_has_own_orbit.3gp";

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.videosample);

pause = (ImageView) findViewById(R.id.imageViewPauseIndicator);

pause.setVisibility(View.GONE);

if (player != null) {

if (!player.isPlaying()) {

pause.setVisibility(View.VISIBLE);

}

}

surfaceViewFrame = (SurfaceView) findViewById(R.id.surfaceViewFrame);

surfaceViewFrame.setOnClickListener(this);

surfaceViewFrame.setClickable(false);

progressBarWait = (ProgressBar) findViewById(R.id.progressBarWait);

holder = surfaceViewFrame.getHolder();

holder.addCallback(this);

holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

player = new MediaPlayer();

player.setOnPreparedListener(this);

player.setOnCompletionListener(this);

player.setScreenOnWhilePlaying(true);

player.setDisplay(holder);

}

private void playVideo() {

new Thread(new Runnable() {

public void run() {

try {

player.setDataSource(video_uri);

player.prepare();

} catch (Exception e) { // I can split the exceptions to get which error i need.

showToast("Error while playing video");

Log.i(TAG, "Error");

e.printStackTrace();

}

}

}).start();

}

private void showToast(final String string) {

runOnUiThread(new Runnable() {

public void run() {

Toast.makeText(VideoPlayer.this, string, Toast.LENGTH_LONG).show();

finish();

}

});

}

public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

// TODO Auto-generated method stub

}

public void surfaceCreated(SurfaceHolder holder) {

playVideo();

}

public void surfaceDestroyed(SurfaceHolder holder) {

// TODO Auto-generated method stub

}

//prepare the video

public void onPrepared(MediaPlayer mp) {

progressBarWait.setVisibility(View.GONE);

// Adjust the size of the video

// so it fits on the screen

int videoWidth = player.getVideoWidth();

int videoHeight = player.getVideoHeight();

float videoProportion = (float) videoWidth / (float) videoHeight;

int screenWidth = getWindowManager().getDefaultDisplay().getWidth();

int screenHeight = getWindowManager().getDefaultDisplay().getHeight();

float screenProportion = (float) screenWidth / (float) screenHeight;

android.view.ViewGroup.LayoutParams lp = surfaceViewFrame.getLayoutParams();

if (videoProportion > screenProportion) {

lp.width = screenWidth;

lp.height = (int) ((float) screenWidth / videoProportion);

} else {

lp.width = (int) (videoProportion * (float) screenHeight);

lp.height = screenHeight;

}

surfaceViewFrame.setLayoutParams(lp);

if (!player.isPlaying()) {

player.start();

}

surfaceViewFrame.setClickable(true);

}

// callback when the video is over

public void onCompletion(MediaPlayer mp) {

mp.stop();

if (updateTimer != null) {

updateTimer.cancel();

}

finish();

}

//pause and resume

public void onClick(View v) {

if (v.getId() == R.id.surfaceViewFrame) {

if (player != null) {

if (player.isPlaying()) {

player.pause();

pause.setVisibility(View.VISIBLE);

} else {

player.start();

pause.setVisibility(View.GONE);

}

}

}

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/533038.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java异常标记_java.lang.RuntimeException:错误:0D0680A8:asn1编码例程:ASN1_CHECK_TLEN:错误的标记...

我收到此错误(在标题中).我不确定为什么,请帮忙.代码如下:public static String decryptRSA(Context mContext, byte[] message) throws Exception {InputStream in mContext.getResources().openRawResource(R.raw.publicrsakey);X509EncodedKeySpec x509EncodedK…

正版我的世界怎么下载java_mcjava正版下载-mc我的世界java安卓正式版极速下载v1.0.1 - 趣趣手游网...

mc我的世界java安卓正式版带你体验最为精彩的多人联机对战玩法,游戏专为java系列打造,在游戏的部分特性上有着各种的提升,以及各种专属的表达,比基岩版能多一些不同的玩法,在这里有着各种不同的玩法以及模式等待你的加…

java原子整数_多线程(四、原子类-AtomicInteger)

案例10个线程并发累加一个整数,每个线程累加1000,保证线程安全Unsafe类,来源于sun.misc包。该类封装了许多类似指针操作,可以直接进行内存管理、操纵对象、阻塞/唤醒线程等操作。package com.jane;import java.util.ArrayList;imp…

java 新建菜单选项_请完成下列Java程序:创建一个下拉式菜单,菜单项包括3个CheckboxM..._考试资料网...

请完成下列Java程序:创建一个下拉式菜单,菜单项包括3个CheckboxMenultem(复选框),一条分割线和一个Exit项。要求打开或关闭复选框时,确定是哪个被切换,是开还是关,并输出它的状态;选择Exit项能够…

adurnio 单片机_单片机20~200A大电流检测电路设计 用AD实现 带原理图,源代码,proteus仿真文件...

//------------------------------51单片机头文件#include//各数字的数码管段码(共阴)unsigned char code DSY_CODE[]{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //数码管显示数组{0,1,2,3,4,5,6,7,8,9}sbit CLKP3^3; //时钟信号sbit STP3^6; //启动信号,由…

java 极客_Java极客思维

​开篇介绍大家好,公众号【Java极客思维】近期会整理一些Java高频面试题分享给小伙伴,也希望看到的小伙伴在找工作过程中能够用得到!本章节主要针对Java一些消息中间件高频面试题进行分享。通知:公众号【Java极客思维】正在送书福…

java拼三级魔方_魔方秘籍(详细解法)《三阶》

魔方根据视频理解:上 下 左 右先将白面变好:(1).变一个白十字(如图所示)(2).转好以后检查十字的四个角的颜色(蓝绿红橙)与旁边面上的中心块的颜色是否相同。(有两个相同的时,如果它们相邻,就一个放在后面,一个放在左面…

php怎么实现点卡充值,利用自动发卡程序的点卡充值传奇脚本

首先:自动售卡 玩家购买到卡密 在游戏输入卡密领取元宝下面是NPC脚本:[main]!这里是点卡充值平台!\\\ \ \\[InPutString18]#IFCHECKCODELIST ..\QuestDiary\卡号列表\5.txt#actCLEARCODELIST ..\QuestDiary\卡号列表\5.txtGAMEGOL…

php转换ofd文件格式,一种OFD格式文档支持脚本的方法与流程

本发明涉及电子文档格式的处理技术,特别涉及一种OFD格式文档支持脚本的方法。背景技术:OFD是一种版式文档格式,全称为开放式版式文档(Open Fixed-layout Document),是国家版式文档格式规范。版式文档是电子文件应用的一个重要门类…

php成品代码,PHP代码

日期当日date(Y-m-d")date(Y-m-d 00:00:00)取日期:年 月 日date("Y", strtotime($startday))date("m", strtotime($startday))date("d", strtotime($startday))上月 下月$last_mont_first_date date(Y-m-01 00:00:00,strtotime…

tp框架中引入php文件,Laravel框架及ThinkPHP框架超级简单的公共文件引入(保留变量)...

为什么要把两个框架放在一起来说呢?额。。。因为TP5.1.x与Laravel实在是太像了,本文主要讲述关于大家顶部及底部文件引入的问题。但是如果顶部和尾部只是单纯的html代码还好说,但是里面通常有变量赋值和循环遍历以及判断等逻辑,这样就带来了比…

pHp30充电宝能用快充吗,65W快充 30分钟充满电 是时候淘汰充电宝了吗?

在过去的一年里,手机快充技术有了新的突破,OPPO推出了65W快充。无独有偶,联想拯救者电竞手机的预热宣传中,号称搭载90W快充。有评测称,使用65W快充,30分钟可以充满一块4000mAh容量的电池,使用90…

php+mockjs,mockjs的常用方法分享

本文主要和大家分享mockjs的常用方法,结合文字和代码和大家讲解,希望能帮助到大家。一.mock.mock()根据数据模板生成模拟数据。更关键的是,我们发起Ajax请求的时候要能够接收到这些数据。这就是Mock.mock()的作用啦!Mock.mock( ru…

php 截取音频文件后缀名,使用PHP从音频流中提取音轨信息

这是一个PHP功能,让您从流媒体URL中提取MP3元数据(StreamTitle)。通常,流服务器icy-metaint在响应中放置一个标题,告诉我们在流中发送元数据的频率。该函数检查该响应头,如果存在,它将用它替换interval参数。否则&…

matlab画圆柱,Matlab 画三维圆柱体

主要学习了画空间圆柱体和空间长方形的绘制方法。有两个surface property:FaceColor和EdgeColor’;先讲FaceColor’,它指定了surface画出曲面的颜色,可以是[r,g,b]的一个向量,分别表示了红绿蓝的颜色配比;也可以是inte…

matlab类间散度矩阵,协方差矩阵和散布矩阵(散度矩阵)的意义

在机器学习模式识别相关算法中,经常需要求样本的协方差矩阵C和散布矩阵S。如在PCA主成分分析中,就需要计算样本的散度矩阵,而有的教材资料是计算协方差矩阵。实质上协方差矩阵和散度矩阵的意义就是一样的,散布矩阵(散度矩阵)前乘以…

把树分成森林 matlab,20170106RF_Matlab 随机森林指的是利用多棵树对样本进行训练并预测的一种分类器,包括两个方面:数据的随 269万源代码下载- www.pudn.com...

文件名称: 20170106RF_Matlab下载 收藏√ [5 4 3 2 1 ]开发工具: matlab文件大小: 441 KB上传时间: 2017-01-06下载次数: 0提 供 者: yanxiu详细说明:随机森林指的是利用多棵树对样本进行训练并预测的一种分类器,包括两个方面:数据的随…

inur new.php id,Cmsez(随易)全站系统 0day

程序名称:Cmsez Web Content Manage System v2.0.0文件:comments.php viewimg.php代码:---------------//commentsinclude "mainfile.php";$artnew article();//设定$confirmyes;//yes:需要管理员认证后才能显示,no:直接显示$membe…

PHP红黑源码,红黑树的实现源码(第二次修订版)

/*-----------------------------------------------------------RB-Tree的插入和删除操作的实现算法参考资料:1) <>2) http://lxr.linux.no/linux/lib/rbtree.c作者&#xff1a;http://www.cppblog.com/converse/您可以自由的传播&#xff0c;修改这份代码&#xff0c;转…

python 自动点击上传以后上传文件,python使用selenium模拟点击网页实现自动导入上传文件功能...

一、环境准备Python版本&#xff1a;3.4编辑器&#xff1a;Pycharmexcel文件&#xff1a;导入的excel模板二、python代码由于工作需要&#xff0c;需要每天定时导入相关excel文件进入后台数据库&#xff0c;由于导入的逻辑比较复杂&#xff0c;所以决定通过python模拟登陆导入网…