你可以通过SurfaceHolder接口访问这个surface,getHolder()方法可以得到这个接口。...如果你要查看 surface被创建和销毁的时机,可以重载surfaceCreated(SurfaceHolder)和 surfaceDestroyed(SurfaceHolder)。...2> 由于surface可能被销毁,它只在SurfaceHolder.Callback.surfaceCreated()和 SurfaceHolder.Callback.surfaceDestroyed...SurfaceHolder Abstract interface to someone holding a display surface....SurfaceHolder是用来操作surface的接口,通过SurfaceView的getHolder来获取 Surface、SurfaceView和SurfaceHolder的关系类似MVC。
代码如下: 对于SurfaceHolder.Callback接口 public class SurfaceViewTemplate extends SurfaceView implements SurfaceHolder.Callback...一般我们通常定义以下三个成员变量 //SurfaceHolder private SurfaceHolder mSurfaceHolder; // 用于绘图的Canvas...SurfaceHolder对象,并注册SurfaceHolder的回调方法。..., Runnable { //SurfaceHolder private SurfaceHolder mSurfaceHolder; // 用于绘图的Canvas private..., Runnable { //SurfaceHolder private SurfaceHolder mSurfaceHolder; // 用于绘图的Canvas private
(SurfaceHolder holder){} //在创建时激发,一般在这里调用画图的线程。...3)SurfaceHolder SurfaceHolder,surface的控制器,用来操纵surface。处理它的Canvas上画的效果和动画,控制表面,大小,像素等。...4)总结整个过程 继承SurfaceView并实现SurfaceHolder.Callback接口 ----> SurfaceView.getHolder()获得SurfaceHolder对象 --...-->SurfaceHolder.addCallback(callback)添加回调函数---->SurfaceHolder.lockCanvas()获得Canvas对象并锁定画布----> Canvas...绘画 ---->SurfaceHolder.unlockCanvasAndPost(Canvas canvas)结束锁定画图,并提交改变,将图形显示。
) 和 SurfaceDestoryed(SurfaceHolder) 方法, 这两个回调方法是 SurfaceHolder.Callback 中设定; -- Surface 控制 : SurfaceView...通过 SurfaceHolder 控制 Surface; (2) SurfaceHolder 简介 Surfaceholder 简介 : SurfaceHolder 是 Surface 的控制器, 用于控制...(), 锁定画布, 可以获得 Canvas 对象, 之后就可以在 Canvas 上绘图了; (3) SurfaceHolder.Callback 简介 SurfaceHolder.Callback 接口...: Surface 销毁"); } } (3) 获取 SurfaceHolder 对象 并添加回调接口子类 获取 SurfaceHolder 流程 : -- a....(this); /* 为 SurfaceHolder 设置回调函数, 即 SurfaceHolder.Callback 子类对象 */ SurfaceHolder 其它设置 : --
定义我们的Camera相关参数,包括摄像头的ID,Camera变量及Camera的回调方法,最后再定义一个内部的SurfaceHolder ?...然后我们先修改构造函数,在构造函数中获取的SurfaceHolder,并在其中加入回调和基本的参数设置,如下图 ?...surfaceHolder) { //开启摄像机 startCamera(mCameraIndex); } @Override public...void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) { } @Override public...void surfaceDestroyed(SurfaceHolder surfaceHolder) { //关闭摄像机 stopCamera(); }
{ private SurfaceHolder holder; private MyThread myThread; // 处理绘图的线程 public MyView(Context...holder; public MyThread(SurfaceHolder holder) { this.holder = holder; isRun = true; }...首先是声明一个继承SurfaceView并且实现SurfaceHolder.CallBack的子类 class MyView extends SurfaceView implements SurfaceHolder.Callback...{ @Override public void surfaceChanged(SurfaceHolder holder, int format, int width...在子类中获得一个用于控制suerfce对象的surfaceHolder对象 holder = SurfaceView.getHodler(); holder.addCallback() 3.
然后我们再继承SurfaceHolder.Callback 这个接口 ,这样我们的GameCanvas类要实现其几个方法 1 public void surfaceCreated(SurfaceHolder...holder) {} 2 public void surfaceDestroyed(SurfaceHolder holder) {} 3 public void surfaceChanged(SurfaceHolder...这样每个方法里面都会有个参数 SurfaceHolder 这个是什么呢??...暂且先不讨论它,后面你会明白他有什么用了, 声明一个SurfaceHolder handle对象,然后在surfaceCreated()方法里面初始化它 如下: handle = this.getHolder...游戏大体框架如下: public class GameCanvas extends SurfaceView implements SurfaceHolder.Callback{ private SurfaceHolder
Camera提供一个setPreviewDisplay(SurfaceHolder)的方法来连接surfaceHolder,并通过他来控制surfaceView....关系如下: Camera — –>SurfaceHolder——>SurfaceView. (2)知道怎么预览了,当然也要知道怎么开启相机.Camera.open()这是个静态方法,如果相机没有别人用着...很奇怪的是,这个方法,不能随便放,如放在构造方法或者onCreate()方法中,都会照成没有预览效果. (3) SurfaceHolder.Callback,这是个holder用来显示surfaceView...{ SurfaceHolder holder; Camera myCamera; public MySurfaceView(Context context...{ SurfaceHolder holder; Camera myCamera; private ShutterCallback shutter = new
03 — SurfaceHolder SurfaceHolder是一个接口,其作用就像一个关于Surface的监听器。...除下面将要提到的SurfaceHolder.Callback外,SurfaceHolder还提供了很多重要的方法,其中最重要的就是: abstract void addCallback(SurfaceHolder.Callbackcallback...) 为SurfaceHolder添加一个SurfaceHolder.Callback回调接口。...04 — SurfaceHolder.Callback 前面已经讲到SurfaceHolder是一个接口,它通过回调方法的方式,让我们可以感知到Surface的创建、销毁或者改变。...SurfaceHolder.Callback中定义了三个接口方法: abstract void surfaceChanged(SurfaceHolder holder, int format, int
isRecording; } }); } private SurfaceHolder.Callback mSurfaceCallback = new...SurfaceHolder.Callback() { /** * * @param surfaceHolder 持有当前 Surface 的 SurfaceHolder...对象 */ @Override public void surfaceCreated(SurfaceHolder surfaceHolder) {...一般在这里将画图的线程停止销毁 * * @param surfaceHolder 持有当前 Surface 的 SurfaceHolder 对象 *.../ @Override public void surfaceDestroyed(SurfaceHolder surfaceHolder) { if
Access to the underlying surface is provided via the SurfaceHolder interface, which can be retrieved...() and SurfaceHolder.Callback.surfaceDestroyed()....绘制过程: 通过SurfaceHolder.getSurface可以获取到Surface; 通过Surface.lockCanvas可以获取到Surface的Canvas; 使用Canvas绘制图像;...surfaceHolder = sSurfaceView.getHolder(); if (surfaceHolder == null) { Log.e...(TAG, "CreateView, surfaceHolder with null.."); } surfaceHolder.addCallback(this
; import android.view.SurfaceHolder.Callback; import android.view.SurfaceView; public class MySurfaceView...extends SurfaceView implements Runnable, Callback { private SurfaceHolder mHolder; // 用于控制SurfaceView.../** * 当SurfaceView创建的时候,调用此函数 */ @Override public void surfaceCreated(SurfaceHolder.../** * 当SurfaceView销毁的时候,调用此函数 */ @Override public void surfaceDestroyed(SurfaceHolder...holder),surfaceChanged(SurfaceHolder holder, int format, int width,int height),surfaceDestroyed(SurfaceHolder
要想在SurfaceView中画出bitmap等,必须用如下格式 private void draw() { Canvas canvas = surfaceHolder.lockCanvas...(); if (canvas == null) return; //draw something surfaceHolder.unlockCanvasAndPost...(canvas); } 然后开启一个线程,每隔一定时间调用这个draw函数、 GameView在创建的时候做如下这些事: 1.初始化一些参数,比如屏幕宽高,bitmap的生成 2.获得SurfaceHolder...接口访问这个surface,getHolder()方法可以得到这个接口 */ surfaceHolder = getHolder(); surfaceHolder.addCallback...(new Callback() { @Override public void surfaceDestroyed(SurfaceHolder arg0)
中获取 //绘制图像的 SurfaceView SurfaceView surfaceView; //在 SurfaceView 回调函数中获取 SurfaceHolder surfaceHolder...Surface 画布 : 这里的 Surface 画布从 SurfaceView 中获得 , SurfaceHolder.Callback 的监听方法中获取 SurfaceHolder 及 Surface...设置 SurfaceHolder 回调函数 : 首先要获取 SurfaceView 的 SurfaceHolder ; 设置 SurfaceHolder 监听回调函数 SurfaceHolder.Callback...; //监听获取画布 this.surfaceHolder = this.surfaceView.getHolder(); surfaceHolder.addCallback...surfaceHolder; ...
在界面布局文件中定义SurfaceView组件,并为SurfaceView的SurfaceHolder添加Callback监听器。...在实现第二步之前需要先给surfaceHolder设置一个callback,callback的3个回调函数如下: @Override public void surfaceCreated(SurfaceHolder...@Override public void surfaceCreated(SurfaceHolder surfaceHolder) { mediaPlayer.setDisplay...(SurfaceHolder surfaceHolder, int i, int i1, int i2) { } @Override public void surfaceDestroyed...(SurfaceHolder surfaceHolder) { } } 效果图如下: 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/132910.html
不过SurfaceView自身主要完成绘图功能,其他功能设置以及事件处理还有待于SurfaceHolder来操作。...SurfaceHolder应与SurfaceView配合使用,下面是SurfaceHolder的常用方法: addCallback : 添加回调接口 removeCallback : 移除回调接口...: 添加预览持有者SurfaceHolder。...该方法用于关联Camera和SurfaceHolder SurfaceHolder.addCallback : 添加回调接口Callback。...SurfaceHolder.removeCallback : 移除回调接口Callback 监听器需要重写的方法 : surfaceCreated : 预览创建。
SurfaceHolder ? 它是一个接口,用于管理SurfaceView。...里面有两个常用的内部接口SurfaceHolder.Callback,SurfaceHolder.Callback2而Callback2是实现于Callback的 常用方法 方法名称 描述 public...在Callback里有三个抽象方法 方法名称 描述 public abstract void surfaceChanged (SurfaceHolder holder, int format, int...这样理解: SurfaceView它用于显示,SurfaceHolder就是用于用来管理这个显示的SurfaceView对象的,但在SurfaceHolder是怎么样去管理这个对象的呢?...这就用到了SurfceHolder.addCallback()方法添加一个SurfaceHolder接口的内部接口的三个抽象方法用于管理或者说是用于监听SurfaceView。
.* import android.os.Build import android.util.AttributeSet import android.view.SurfaceHolder import...holder.unlockCanvasAndPost(mCanvas) Thread.sleep(20) } } /* 下面的三个函数是 实现 SurfaceHolder.Callback...接口方法 */ override fun surfaceChanged(holder: SurfaceHolder?...BitmapFactory.decodeResource(resources, R.mipmap.ic_launcher) } override fun surfaceDestroyed(holder: SurfaceHolder...{ } override fun surfaceCreated(holder: SurfaceHolder?) { } }
{ private static final String TAG = "main"; private SurfaceHolder mHolder; private Camera...mHolder = getHolder(); // 为SurfaceHolder指定回调 mHolder.addCallback(this);...); } public void surfaceCreated(SurfaceHolder holder) { // 当Surface被创建之后,开始Camera的预览...(IOException e) { Log.d(TAG, "预览失败"); } } public void surfaceDestroyed(SurfaceHolder...holder) { } public void surfaceChanged(SurfaceHolder holder, int format, int w, int
,Runnable { SurfaceHolder holder; Rect rect;//创建类 public MyView(Context context) ...{ super(context); holder = this.getHolder();//获取SurfaceHolder对象实例 holder.addCallback...rect); t.start(); } @Override //当SurfaceView尺寸改变时调用 public void surfaceChanged(SurfaceHolder...int format, int width,int height){} @Override //当SurfaceView创建时调用 public void surfaceCreated(SurfaceHolder...Thread(this).start();//启动新的线程 } //当SurfaceView销毁时调用 @Override public void surfaceDestroyed(SurfaceHolder
领取专属 10元无门槛券
手把手带您无忧上云