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

发布时间:2013-9-17 16:07    发布者:reggae
关键词: 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可以多线程访问,在多线程中画图。
  1. import android.content.Context;
  2. import android.graphics.Canvas;
  3. import android.graphics.Color;
  4. import android.graphics.Paint;
  5. import android.util.Log;
  6. import android.view.SurfaceHolder;
  7. import android.view.SurfaceView;
  8. public class MySurfaceView extends SurfaceView implements
  9. SurfaceHolder.Callback {
  10. private Context mContext;
  11. private SurfaceHolder mHolder;
  12. public TouchScreenAdjusterSurfaceView(Context context,) {
  13. super(context);
  14. mContext = context;
  15. mHolder = TouchScreenAdjusterSurfaceView.this.getHolder();
  16. mHolder.addCallback(TouchScreenAdjusterSurfaceView.this);
  17. this.setFocusableInTouchMode(true); // to make sure that we can get
  18. // touch events and key events,and
  19. // "setFocusable()" to make sure we
  20. // can get key events
  21. }
  22. @Override
  23. public void surfaceChanged(SurfaceHolder holder, int format, int width,
  24. int height) {
  25. // TODO Auto-generated method stub
  26. }
  27. @Override
  28. public void surfaceCreated(SurfaceHolder holder) {
  29. //now you can get the Canvas and draw something here
  30. }
  31. @Override
  32. public void surfaceDestroyed(SurfaceHolder holder) {
  33. // TODO Auto-generated method stub
  34. }
  35. public void drawMyShape(PointPostion ps) {
  36. mCanvas = mHolder.lockCanvas();
  37. // draw anything you like
  38. mHolder.unlockCanvasAndPost(mCanvas);
  39. }
  40. }
复制代码
希望本文对广大安卓开发者有所帮助,感谢阅读本文。更多安卓技术问题欢迎加群探讨:314230976,验证码:eec,不写验证不予通过哟~

本文地址:https://www.eechina.com/thread-121118-1-1.html     【打印本页】

本站部分文章为转载或网友发布,目的在于传递和分享信息,并不代表本网赞同其观点和对其真实性负责;文章版权归原作者及原出处所有,如涉及作品内容、版权和其它问题,我们将根据著作权人的要求,第一时间更正或删除。
您需要登录后才可以发表评论 登录 | 立即注册

厂商推荐

相关视频

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表