SurfaceView播放视频控件的使用

    xiaoxiao2021-12-14  29




    初步了解 :

    /** * 演示SurfaceView控件的使用 * SurfaceView 单位时间内完成界面的大量多次更新 * 双缓冲机制 : * A线程----更新ui -----后台计算---更新ui * B线程----后台计算----更新ui ---后台计算 * 可以在子线程更新ui */ public class MainActivity extends Activity { private SurfaceView sv; boolean flag; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //占用的内存和cpu的开销很大. 当界面完全可见的时候才被创建完毕,如果界面最小化就会被销毁. sv = (SurfaceView) findViewById(R.id.sv); //注册一个surfaceview控制器的回调 sv.getHolder().addCallback(new Callback() {//参数是一个接口 直接new这个接口,重写里面的方法 @Override public void surfaceDestroyed(SurfaceHolder holder) { System.out.println("surface被销毁了"); flag = false; } @Override public void surfaceCreated(SurfaceHolder holder) { System.out.println("surface创建了"); flag = true; new Thread(){ public void run() { for(int i = 0;i<100;i++){ if(!flag){ return ; } //界面里面内容显示的控制器 SurfaceHolder holder = sv.getHolder();//可以理解为SurfaceHolder的一个容器 Canvas canvas = holder.lockCanvas();//锁定画布 要解锁否则会报错 canvas.drawColor(Color.BLACK);//画板颜色 把画板设置为黑色 int radius = 5+i; //设置半径 Paint paint = new Paint();//画笔 paint.setColor(Color.RED);//设置画笔颜色 // 宽 高 园半径 画笔 canvas.drawCircle(250, 250, radius, paint);//绘画圆 holder.unlockCanvasAndPost(canvas);//解锁画布 SystemClock.sleep(100); } }; }.start(); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { System.out.println("surface大小发生了变化"); } }); } public void click(View view){ } }

    采用surfaceview播放视频


    public class MainActivity extends Activity { private SurfaceView sv; private MediaPlayer mediaPlayer;//定义多媒体播放器 可以播放音频也可以播放视频 private SharedPreferences sp; //定义缓存容器 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); sv = (SurfaceView) findViewById(R.id.sv); //获取容器缓冲区 的存储位置 私有模式 sp = getSharedPreferences("config", MODE_PRIVATE); //设置容器 注册回调 sv.getHolder().addCallback(new Callback() { @Override public void surfaceDestroyed(SurfaceHolder holder) { System.out.println("surface被销毁"); if(mediaPlayer!=null){ //记录当前播放到哪个位置 int position = mediaPlayer.getCurrentPosition(); //创建缓存容器 Editor editor = sp.edit(); //将当前位置存储在缓冲容器中 editor.putInt("position", position); editor.commit(); mediaPlayer.stop();//停止播放 mediaPlayer.release();//释放资源 } } @Override public void surfaceCreated(SurfaceHolder holder) { System.out.println("surface被创建"); try { mediaPlayer = new MediaPlayer(); //设置多媒体的数据源 mediaPlayer.setDataSource("/mnt/sdcard/oppo.3gp"); mediaPlayer.prepare();//播放准备 } catch (Exception e) { e.printStackTrace(); } //指定多媒体的内容实在holder里面显示 mediaPlayer.setDisplay(holder);//设置解析出来的画面在容器里播放 mediaPlayer.start();//播放视频 //把播放的位置定为上次播放的位置 mediaPlayer.seekTo(sp.getInt("position", 0));//如果打开就从上一次停止的时候播放 } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } }); } }
    转载请注明原文地址: https://ju.6miu.com/read-971656.html

    最新回复(0)