通过 getHolder()方法可以得到这个 SurfaceHolder对象
- UID
- 1023166
- 性别
- 男
- 来自
- 燕山大学
|
通过 getHolder()方法可以得到这个 SurfaceHolder对象
关键词: android
原理(来自Android的SDk文档):
访问SurfaceView的底层图形是通过SurfaceHolder接口来实现的,通过 getHolder()方法可以得到这个 SurfaceHolder对象。你应该实现surfaceCreated(SurfaceHolder)和 surfaceDestroyed(SurfaceHolder)方法来知道在这个Surface在窗口的显示和隐藏过程中是什么时候创建和销毁的。
SurfaceView可以在多线程中被访问。
注 意:一个SurfaceView只在SurfaceHolder.Callback.surfaceCreated() 和 SurfaceHolder.Callback.surfaceDestroyed()调用之间是可用的,其他时间是得不到它的Canvas对象的 (null)。
我的访问过程:
创建一个SurfaceView的子类,实现SurfaceHolder.Callback接口。
得到这个SurfaceView的SurfaceHolder对象holder。
holder.addCallback(callback),也就是实现SurfaceHolder.Callback接口的类对象。
在SurfaceHolder.Callback.surfaceCreated()调用过后holder.lockCanvas()对象就可以得到SurfaceView对象对应的Canvas对象canvas了。
用canvas对象画图。
画图结束后调用holder.unlockCanvasAndPost()就把图画在窗口中了。
SurfaceView可以多线程访问,在多线程中画图。
- import android.content.Context;
- import android.graphics.Canvas;
- import android.graphics.Color;
- import android.graphics.Paint;
- import android.util.Log;
- import android.view.SurfaceHolder;
- import android.view.SurfaceView;
- public class MySurfaceView extends SurfaceView implements
- SurfaceHolder.Callback {
- private Context mContext;
- private SurfaceHolder mHolder;
- public TouchScreenAdjusterSurfaceView(Context context,) {
- super(context);
- mContext = context;
- mHolder = TouchScreenAdjusterSurfaceView.this.getHolder();
- mHolder.addCallback(TouchScreenAdjusterSurfaceView.this);
- this.setFocusableInTouchMode(true); // to make sure that we can get
- // touch events and key events,and
- // "setFocusable()" to make sure we
- // can get key events
- }
- @Override
- public void surfaceChanged(SurfaceHolder holder, int format, int width,
- int height) {
- // TODO Auto-generated method stub
- }
- @Override
- public void surfaceCreated(SurfaceHolder holder) {
- //now you can get the Canvas and draw something here
- }
- @Override
- public void surfaceDestroyed(SurfaceHolder holder) {
- // TODO Auto-generated method stub
- }
- public void drawMyShape(PointPostion ps) {
- mCanvas = mHolder.lockCanvas();
- // draw anything you like
- mHolder.unlockCanvasAndPost(mCanvas);
- }
- }
复制代码
希望本文对广大安卓开发者有所帮助,感谢阅读本文。更多安卓技术问题欢迎加群探讨:314230976,验证码:eec,不写验证不予通过哟~ |
|
|
|
|
|
|