surfview 的一般使用

  1. surfview 的生命周期分别为surfaceCreated(创建)   surfaceChanged(改变)   surfaceDestroyed(销毁),通过surfview的生命周期来控制线程  通过线程控制draw()方法来控制surfview的内容的变化,实现ontouchevet方法实现对surfview的点击事件

  2. package com.zhy.view;  
  3.   
  4. import android.content.Context;  
  5. import android.graphics.Canvas;  
  6. import android.graphics.PixelFormat;  
  7. import android.util.AttributeSet;  
  8. import android.view.SurfaceHolder;  
  9. import android.view.SurfaceHolder.Callback;  
  10. import android.view.SurfaceView;  
  11.   
  12. public class GameFlabbyBird extends SurfaceView implements Callback, Runnable  
  13. {  
  14.   
  15.     private SurfaceHolder mHolder;  
  16.     /** 
  17.      * 与SurfaceHolder绑定的Canvas 
  18.      */  
  19.     private Canvas mCanvas;  
  20.     /** 
  21.      * 用于绘制的线程 
  22.      */  
  23.     private Thread t;  
  24.     /** 
  25.      * 线程的控制开关 
  26.      */  
  27.     private boolean isRunning;  
  28.   
  29.     public GameFlabbyBird(Context context)  
  30.     {  
  31.         this(context, null);  
  32.     }  
  33.   
  34.     public GameFlabbyBird(Context context, AttributeSet attrs)  
  35.     {  
  36.         super(context, attrs);  
  37.   
  38.         mHolder = getHolder();  
  39.         mHolder.addCallback(this);  
  40.   
  41.         setZOrderOnTop(true);// 设置画布 背景透明  
  42.         mHolder.setFormat(PixelFormat.TRANSLUCENT);  
  43.   
  44.         // 设置可获得焦点  
  45.         setFocusable(true);  
  46.         setFocusableInTouchMode(true);  
  47.         // 设置常亮  
  48.         this.setKeepScreenOn(true);  
  49.   
  50.     }  
  51.   
  52.     @Override  
  53.     public void surfaceCreated(SurfaceHolder holder)  
  54.     {  
  55.   
  56.         // 开启线程  
  57.         isRunning = true;  
  58.         t = new Thread(this);  
  59.         t.start();  
  60.     }  
  61.   
  62.     @Override  
  63.     public void surfaceChanged(SurfaceHolder holder, int format, int width,  
  64.             int height)  
  65.     {  
  66.         // TODO Auto-generated method stub  
  67.   
  68.     }  
  69.   
  70.     @Override  
  71.     public void surfaceDestroyed(SurfaceHolder holder)  
  72.     {  
  73.         // 通知关闭线程  
  74.         isRunning = false;  
  75.     }  
  76.   
  77.     @Override  
  78.     public void run()  
  79.     {  
  80.         while (isRunning)  
  81.         {  
  82.             long start = System.currentTimeMillis();  
  83.             draw();  
  84.             long end = System.currentTimeMillis();  
  85.   
  86.             try  
  87.             {  
  88.                 if (end - start < 50)  
  89.                 {  
  90.                     Thread.sleep(50 - (end - start));  
  91.                 }  
  92.             } catch (InterruptedException e)  
  93.             {  
  94.                 e.printStackTrace();  
  95.             }  
  96.   
  97.         }  
  98.   
  99.     }  
  100.   
  101.     private void draw()  
  102.     {  
  103.         try  
  104.         {  
  105.             // 获得canvas  
  106.             mCanvas = mHolder.lockCanvas();  
  107.             if (mCanvas != null)  
  108.             {  
  109.                 // drawSomething..  
  110.             }  
  111.         } catch (Exception e)  
  112.         {  
  113.         } finally  
  114.         {  
  115.             if (mCanvas != null)  
  116.                 mHolder.unlockCanvasAndPost(mCanvas);  
  117.         }  
  118.     }  
  119. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值