我遇到了一个我无法解决的问题.我正在使用MediaPlayer类来播放视频;但是,我总是失去原有的宽高比.这里提到了媒体播放器代码和xml代码.我尝试了很多东西,但仍然无法解决问题.我需要保持原始的宽高比.我已经在

Android Manifest文件中将此活动声明为全屏.我还在媒体播放器代码之后附加了xml代码.请建议我.

private class ErrorListener implements OnErrorListener {

// FIXME: @Override

public boolean onError(MediaPlayer mp, int what, int extra) {

String message = "Unknown error";

switch (what) {

case MediaPlayer.MEDIA_ERROR_UNKNOWN:

message = "Unable to play media";

showError(message);

break;

case MediaPlayer.MEDIA_ERROR_SERVER_DIED:

message = "Server failed";

showError(message);

break;

case MediaPlayer.MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK:

message = "Invalid media";

showError(message);

break;

}

return false;

}

}

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

setContentView(R.layout.videoview);

Intent intent = getIntent();

uri = intent.getData();

new loadMovie().execute();

mPreview = (SurfaceView) findViewById(R.id.videoview);

mPreview.bringToFront();

holder = mPreview.getHolder();

holder.addCallback(this);

holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

mediaPlayer = new MediaPlayer();

}// onCreate Method Ends

private void playVideo() {

doCleanUp();

try {

mediaPlayer.setDataSource(this, uri);

} catch (IllegalArgumentException e) {

e.printStackTrace();

} catch (SecurityException e) {

e.printStackTrace();

} catch (IllegalStateException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

mediaPlayer.setDisplay(holder);

try {

mediaPlayer.prepare();

} catch (IllegalStateException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

mediaPlayer.setOnErrorListener(new ErrorListener());

mediaPlayer.setOnBufferingUpdateListener(this);

mediaPlayer.setOnCompletionListener(this);

mediaPlayer.setOnPreparedListener(this);

mediaPlayer.setOnVideoSizeChangedListener(this);

mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);

mediaController = new MediaController(this);

}

@Override

public boolean onTouchEvent(MotionEvent event) {

mediaController.show();

return false;

}

// --MediaPlayerControl

// methods----------------------------------------------------

public void start() {

mediaPlayer.start();

}

public void pause() {

mediaPlayer.pause();

}

public int getDuration() {

return mediaPlayer.getDuration();

}

public int getCurrentPosition() {

return mediaPlayer.getCurrentPosition();

}

public void seekTo(int i) {

mediaPlayer.seekTo(i);

}

public boolean isPlaying() {

return mediaPlayer.isPlaying();

}

public int getBufferPercentage() {

return 0;

}

public boolean canPause() {

return true;

}

public boolean canSeekBackward() {

return true;

}

public boolean canSeekForward() {

return true;

}

// End of MediaPlayer

// Controls--------------------------------------------------------

// ------------------------

public void onPrepared(MediaPlayer mediaPlayer) {

mediaController.setMediaPlayer(this);

mediaController.setAnchorView(findViewById(R.id.videoview));

mIsVideoReadyToBePlayed = true;

if (mIsVideoReadyToBePlayed && mIsVideoSizeKnown) {

startVideoPlayback();

}

handler.post(new Runnable() {

public void run() {

mediaController.setEnabled(true);

mediaController.show();

}

});

}

public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {

// TODO Auto-generated method stub

}

public void surfaceCreated(SurfaceHolder holder) {

// TODO Auto-generated method stub

playVideo();

}

public void surfaceDestroyed(SurfaceHolder arg0) {

}

private void startVideoPlayback() {

holder.setFixedSize(mVideoWidth, mVideoHeight);

mediaPlayer.start();

}

public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {

if (width == 0 || height == 0) {

return;

}

mIsVideoSizeKnown = true;

mVideoWidth = width;

mVideoHeight = height;

if (mIsVideoReadyToBePlayed && mIsVideoSizeKnown) {

startVideoPlayback();

}

}

public void onCompletion(MediaPlayer arg0) {

}

public void onBufferingUpdate(MediaPlayer mp, int percent) {

}

private void releaseMediaPlayer() {

mediaPlayer.release();

mediaPlayer = null;

}

private void doCleanUp() {

mVideoWidth = 0;

mVideoHeight = 0;

mIsVideoReadyToBePlayed = false;

mIsVideoSizeKnown = false;

}

这是XML:

android:orientation="horizontal"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:gravity="center"

>

android:layout_width="wrap_content"

android:layout_height="wrap_content"

/>

任何人都可以告诉我如何保持视频的宽高比?

android mp4宽高,Android:MediaPlayer视频宽高比问题相关推荐

  1. android 测量字体宽高,Android中测量Text的宽度和高度

    @(Android技术文章) 个人博客地址: 斯科特安的时间 Android中,在自定义View中通过Canvas绘制文字时,经常需要测量文字的宽度和高度. Paint.measureText (测量 ...

  2. android mp4添加滤镜,Android 视频外部滤镜:挂件、贴纸,或美颜效果

    视频外部滤镜 1 使用场景 当 SDK 自带的美颜无法满足需求,例如需要做挂件.贴纸,或者美颜效果无法达到预期时,建议开发者使用外部滤镜功能. 对于比较复杂的场景,例如想要用摄像头画面做图层混合,建议 ...

  3. js 获取上传图片和视频的宽高,还有视频的时长

    场景: 当产品经理告诉你说:我们需要限制上传的图片或视频的尺寸,不符合要求不允许上传,这个时候你该怎么做? 不用多想,很明显我们需要想办法拿到图片或视频的宽度,然后和预期的尺寸进行对比过滤,就能轻易实 ...

  4. LivePlayer.js免费直播、点播播放器如何自适应div宽高集成播放视频

    LivePlayer网页直播.点播播放器 资源下载:https://www.liveqing.com/docs/download/LivePlayer.html 使用说明:https://www.li ...

  5. php获取屏幕的宽高,JS获取屏幕宽高

    Javascript:网页可见区域宽: document.body.clientWidth 网页可见区域高: document.body.clientHeight 网页可见区域宽: document. ...

  6. 原生js获取宽高与jquery获取宽高的方法的关系

    说明:1.因为获取高度的情况跟获取宽度的情况一样,所以以下只说获取宽度的情况.  2.以下所说的所有方法与属性所返回的值都是不带单位的.  3.为了方便说明,以下情况采用缩写表示:  obj -> ...

  7. hwd分别是长宽高_衣柜长宽高标准尺寸一般是多少 衣柜怎么保养

    一般的话,我们在市面上购买衣柜的时候会考虑尺寸的问题,因为家里房子的大小不相同,所以选择的尺寸也不一样,如果买的太大了家里就放不下,所以,大家一定要看一下衣柜长宽高的标准尺寸一般是多少,大家可以根据标 ...

  8. css图片宽高自适应盒子(宽>高就限制宽,高>宽就限制高)

    效果图: 宽>高就限制宽 即宽度100% ,高度自动.例如:19201088 高>宽就限制高 即高度100%,宽度自动.例如:19442592 很多时候图片宽高比不固定,而且作为一个前端, ...

  9. android获取导航栏宽高,Android获取屏幕的宽高度、状态栏、标题栏、导航栏、编辑区域高度...

    目录 0.相关文章: 1.获取屏幕款高度 代码: /** * 获取屏幕宽度 * * @param context 上下文对象 * @return int */ public static int ge ...

最新文章

  1. 单片机简单的计算器c语言程序,求一个 89C51 简易计算器的c语言程序 只要加减乘除就行!...
  2. 新鲜出炉!年度10篇新颖到出格的 AI 论文(附链接)
  3. 【51NOD1287】加农炮
  4. 【数据平台】Python解析Ngnix日志
  5. 基于知识图谱的问答系统(以医疗行业为例)
  6. 1. Spring boot 之热部署
  7. c语言迪思卡尔算法,【论文】数字化的意匠_数字化设计与造型的认知学反思_谭峥.pdf...
  8. 亚马逊 html格式转换,亚马逊七种产品描述常用HTML代码,文字颜色代码让Listing更出彩...
  9. 基于JAVA+SpringMVC+MYSQL的医院皮试管理系统
  10. java中中的赋值运算符_Java中的赋值运算符
  11. mysql数据库一列多值查询
  12. java sha1工具类_SHA1算法工具类
  13. 自己动手实现STL 02:构造析构的基本工具construct()和destroy()(stl_construct.h)
  14. 我为什么要使用Webpack?
  15. 2018-2019-1 20189218《Linux内核原理与分析》第二周作业
  16. linux 组态软件,基于嵌入式Linux的组态软件实时数据库的设计
  17. j2me 关于MIDP 读取jad文件
  18. mysql pxc 使用_MySQL PXC集群安装配置
  19. 数据结构--逻辑结构
  20. 论文笔记1 MOEFL Multi-objective Evolutionary Federated Learning

热门文章

  1. Jedis无法远程连接阿里云服务器的redis问题
  2. 计图(Jittor) 1.1版本:新增骨干网络、JIT功能升级、支持多卡训练
  3. TensorFlow Keras API用法
  4. RADAR和LIDAR区别分析
  5. 嵌入式C程序基础与编程结构
  6. Laravel/Lumen 使用 Redis队列
  7. zookeeper原理特点案例
  8. ValueError: max() arg is an empty sequence
  9. failed to load external entity file:/C:/Users/fmm/.AndroidStudio3.4/config/options/updates.xml
  10. Java 二进制,八进制,十进制,十六进制