首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

通过 getHolder()方法可以得到这个 SurfaceHolder对象

通过 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,不写验证不予通过哟~


返回列表