SurfaceView的简单介绍
来源:互联网 发布:a1453支持什么网络 编辑:程序博客网 时间:2024/06/01 07:24
surfaceView的特点:
1. 使用了双缓冲的机制,两个线程交替执行
解释:何为双缓冲,一个线程在计算,另外一个线程就在渲染。
2. surfaceView这个控件非常的消耗资源,所以,系统不会再一上来的时候就马上去绘制这个控件.该控件,会等到其他界面资源渲染好之后,才会渲染。所以,一上来就对该控件进行操作。是会报空指针的。因此解决的方案就是添加监听就好。
SurfaceHolder holder = sv.getHolder(); holder.addCallback(new Callback() { //销毁时候调用 @Override public void surfaceDestroyed(SurfaceHolder holder) { Log.d(TAG, "surfaceDestroyed---"); } //创建时候调用 @Override public void surfaceCreated(SurfaceHolder holder) { Log.d(TAG, "surfaceCreated---"); new Thread(){ @Override public void run() { //SystemClock.sleep(10000000); //得到控制器 SurfaceHolder holder = sv.getHolder(); int radius = 5; for (int i = 0; i < 100; i++) { Canvas canvas = holder.lockCanvas(); canvas.drawColor(Color.BLACK); Paint paint = new Paint(); paint.setColor(Color.RED); canvas.drawCircle(200, 200, radius+i, paint); holder.unlockCanvasAndPost(canvas); SystemClock.sleep(10); } } }.start(); } //状态发生改变时调用 @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { Log.d(TAG, "surfaceChanged---"); } });
VideoView的父类是就是SurfaceView。videoView只是增强了一下SurfaceView添加了一些可见的界面。
//1. 有控件 VideoView vv = (VideoView) findViewById(R.id.vv); //定义多媒体控制器 MediaController controller = new MediaController(this); //设置控制的是哪一个view controller.setAnchorView(vv); //设置vv的控制器是谁 vv.setMediaController(controller); //2. 关联视频 vv.setVideoPath("/mnt/sdcard/oppo.3gp"); //3. 播放 vv.start();
既然videoView是surfaceView的子类。所以我们在制作播放器的时候。就是增强surfaceView。
//1. 有控件 SurfaceView sv = (SurfaceView) findViewById(R.id.sv); //得到控制器 SurfaceHolder holder = sv.getHolder(); holder.addCallback(new Callback() { private MediaPlayer mediaPlayer; @Override public void surfaceDestroyed(SurfaceHolder holder) { int position = mediaPlayer.getCurrentPosition(); SharedPreferences sp = getSharedPreferences("music", 0); sp.edit().putInt("position", position).commit(); mediaPlayer.release(); mediaPlayer = null; } @Override public void surfaceCreated(SurfaceHolder holder) { //播放视频 try { int position = getSharedPreferences("music", 0).getInt("position", 0); mediaPlayer = new MediaPlayer(); mediaPlayer.setDataSource("/mnt/sdcard/oppo.3gp"); mediaPlayer.prepare(); //显示画面 mediaPlayer.setDisplay(holder); //跳转到上一次播放位置 mediaPlayer.seekTo(position); mediaPlayer.start(); } catch (Exception e) { e.printStackTrace(); } } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { // TODO Auto-generated method stub } });
阅读全文
0 0
- surfaceView的简单介绍
- SurfaceView的简单介绍
- Android之SurfaceView的简单介绍
- android中SurfaceView的简单介绍
- SurfaceView、SurfaceHolder和SurfaceHolder.CallBack的简单介绍
- android的surfaceView介绍
- surfaceview的介绍
- SurfaceView的介绍
- SurfaceView的简单使用
- SurfaceView的简单应用
- SurfaceView的简单使用
- Android使用SurfaceView播放视频 简单介绍
- SurfaceView的介绍和应用
- SurfaceView的介绍和使用
- Android SurfaceView的简单学习
- SurfaceView的一些简单记录
- 简单的视频播放surfaceView
- Exoplayer的简单实现-surfaceView
- H5案例分享:移动端touch事件判断滑屏手势的方向
- Linux时钟管理clk
- 《C语言及程序设计初步》_1.11算术运算符与算术表达式_实践13——坐标转换
- 360webscan防注入脚本全面绕过
- Android 半透明通知栏显示 Activity全屏
- SurfaceView的简单介绍
- ssh整合之环境配置
- explicit关键字
- show()和exec()
- Axon Framework跟踪最后期限
- 生成过滤设备并绑定_串口
- ssh整合之开发步骤
- 浅谈数据库的ACID
- Struts2 类型转换和数据校验