通過(guò) getHolder()方法可以得到這個(gè) SurfaceHolder對象

發(fā)布時(shí)間:2013-9-17 16:07    發(fā)布者:reggae
關(guān)鍵詞: android
原理(來(lái)自Android的SDk文檔):
訪(fǎng)問(wèn)SurfaceView的底層圖形是通過(guò)SurfaceHolder接口來(lái)實(shí)現的,通過(guò) getHolder()方法可以得到這個(gè) SurfaceHolder對象。你應該實(shí)現surfaceCreated(SurfaceHolder)和 surfaceDestroyed(SurfaceHolder)方法來(lái)知道在這個(gè)Surface在窗口的顯示和隱藏過(guò)程中是什么時(shí)候創(chuàng )建和銷(xiāo)毀的。
SurfaceView可以在多線(xiàn)程中被訪(fǎng)問(wèn)。
注 意:一個(gè)SurfaceView只在SurfaceHolder.Callback.surfaceCreated() 和 SurfaceHolder.Callback.surfaceDestroyed()調用之間是可用的,其他時(shí)間是得不到它的Canvas對象的 (null)。
我的訪(fǎng)問(wèn)過(guò)程:
創(chuàng )建一個(gè)SurfaceView的子類(lèi),實(shí)現SurfaceHolder.Callback接口。
得到這個(gè)SurfaceView的SurfaceHolder對象holder。
holder.addCallback(callback),也就是實(shí)現SurfaceHolder.Callback接口的類(lèi)對象。
在SurfaceHolder.Callback.surfaceCreated()調用過(guò)后holder.lockCanvas()對象就可以得到SurfaceView對象對應的Canvas對象canvas了。
用canvas對象畫(huà)圖。
畫(huà)圖結束后調用holder.unlockCanvasAndPost()就把圖畫(huà)在窗口中了。
SurfaceView可以多線(xiàn)程訪(fǎng)問(wèn),在多線(xiàn)程中畫(huà)圖。
  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. }
復制代碼
希望本文對廣大安卓開(kāi)發(fā)者有所幫助,感謝閱讀本文。更多安卓技術(shù)問(wèn)題歡迎加群探討:314230976,驗證碼:eec,不寫(xiě)驗證不予通過(guò)喲~

本文地址:http://selenalain.com/thread-121118-1-1.html     【打印本頁(yè)】

本站部分文章為轉載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀(guān)點(diǎn)和對其真實(shí)性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問(wèn)題,我們將根據著(zhù)作權人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页