canvas教程

黑马程序员Android就业面试技巧系列-技术篇 (视频播放)

字号+ 作者:H5之家 来源:H5之家 2018-03-07 14:28 我要评论( )

【济南中心】 Android 就业面试技巧系列-技术篇(视频播放)在 Android 中,我们有三种方式来实现视频的播放: 第三方的开源的框架 Vitamio 1、使用其自带的播放器


【济南中心】 Android 就业面试技巧系列-技术篇(视频播放)

在 Android 中,我们有三种方式来实现视频的播放: 第三方的开源的框架 Vitamio 1、使用其自带的播放器。指定 Action 为 ACTION_VIEW,Data 为 Uri,Type 为其 MIME 类型。 2、 使用 VideoView 来播放。 在布局文件中使用 VideoView 结合 MediaController 来实现 对其控制。 3、使用 MediaPlayer 类和 SurfaceView 来实现,这种方式很灵活。 ( 使用 MediaPlayer 完成播放,同时界面使用 SurfaceView 来实现 ) 4 第三方的开源的框架 Vitamio 第一种、调用其自带的播放器: [Java] 纯文本查看 复制代码 ? 1 Uri uri = Uri.parse(Environment.getExternalStorageDirectory().getPath()+"/Test_Movie.m4v"); 2 //调用系统自带的播放器 3 4 5 Intent intent = new Intent(Intent.ACTION_VIEW); Log.v("URI:::::::::", uri.toString()); intent.setDataAndType(uri, "video/mp4");

6 [align=left]startActivity(intent);

第二种、使用 VideoView 来实现:

黑马程序员济南中心 编著

[Java] 纯文本查看 复制代码 ? 1 Uri uri = Uri.parse(Environment.getExternalStorageDirectory().getPath()+"/Test_Movie.m4v"); 2 VideoView videoView = (VideoView)this.findViewById(R.id.video_view); 3 videoView.setMediaController(new MediaController(this)); 4 videoView.setVideoURI(uri); 5 videoView.start(); 6 videoView.requestFocus();

第三种:使用 MediaPlayer 和 SurfaceView 来实现 Serfaceview 的使用步骤如下: 1、定义 可以直接从内存或者 DMA 等硬件接口取得图像数据,是个非常重要的绘图容器。 它的特性是: 可以在主线程之外的线程中向屏幕绘图上。 这样可以避免画图任务繁重的时候 造成主线程阻塞,从而提高了程序的反应速度。在游戏开发中多用到 SurfaceView,游戏 中的背景、人物、动画等等尽量在画布 canvas 中画出。 2、实现 首先继承 SurfaceView 并实现 SurfaceHolder.Callback 接口 使用接口的原因:因为使用 SurfaceView 有一个原则,所有的绘图工作必须得在 Surface 被创建之后才能开始(Surface—表面,这个概念在 图形编程中常常被提到。基本上我们可 以把它当作显存的一个映射,写入到 Surface 的内容 可以被直接复制到显存从而显示出来,这使得显示速度会非常快),而在

黑马程序员济南中心 编著

Surface 被销毁之前必须结束。 所以 Callback 中的 surfaceCreated 和 surfaceDestroyed 就成了绘图处理代码的边界。 需要重写的方法 (1)public void surfaceChanged(SurfaceHolder holder,int format,int width,int height){} //在 surface 的大小发生改变时激发 (2)public void surfaceCreated(SurfaceHolder holder){} //在创建时激发,一般在这里调用画图的线程。 (3)public void surfaceDestroyed(SurfaceHolder holder) {} //销毁时激发,一般在这里将画图的线程停止、释放。 整 个过程:继承 SurfaceView 并实现 SurfaceHolder.Callback 接口 ----> SurfaceView.getHolder()获得 SurfaceHolder 对象 ---->SurfaceHolder.addCallback(callback) 添加回调函数 ---->SurfaceHolder.lockCanvas()获得 Canvas 对象并锁定画布----> Canvas 绘画 ---->SurfaceHolder.unlockCanvasAndPost(Canvas canvas)结束锁定画图,并提交改 变,将图形显示。 3、SurfaceHolder 这里用到了一个类 SurfaceHolder,可以把它当成 surface 的控制器,用来操纵 surface。处 理它的 Canvas 上画的效果和动画,控制表面,大小,像素等。 几个需要注意的方法: (1)、abstract void addCallback(SurfaceHolder.Callback callback); // 给 SurfaceView 当前的持有者一个回调对象。

黑马程序员济南中心 编著

(2)、abstract Canvas lockCanvas(); // 锁定画布, 一般在锁定后就可以通过其返回的画布对象 Canvas, 在其上面画图等操作了。 (3)、abstract Canvas lockCanvas(Rect dirty); // 锁定画布的某个区域进行画图等..因为画完图后,会调用下面的 unlockCanvasAndPost 来改变显示内容。 // 相对部分内存要求比较高的游戏来说, 可以不用重画 dirty 外的其它区域的像素, 可以提 高速度。 (4)、abstract void unlockCanvasAndPost(Canvas canvas); // 结束锁定画图,并提交改变。

黑马程序员济南中心 编著


 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
网友点评