码迷,mamicode.com
首页 > 其他好文 > 详细

SurfaceView的简单使用

时间:2016-09-13 13:09:57      阅读:116      评论:0      收藏:0      [点我收藏+]

标签:

  1 package com.example.administrator.mystudent.surfaceView;
  2 
  3 import android.content.Context;
  4 import android.graphics.Canvas;
  5 import android.graphics.Color;
  6 import android.graphics.Paint;
  7 import android.graphics.Rect;
  8 import android.util.AttributeSet;
  9 import android.view.SurfaceHolder;
 10 import android.view.SurfaceView;
 11 
 12 /**
 13  * Created by Administrator on 2016/9/13.
 14  */
 15 public class TestSufaceView extends SurfaceView implements SurfaceHolder.Callback {
 16 
 17     private SurfaceHolder holder;
 18     private MyThread myThread;
 19 
 20     public TestSufaceView(Context context) {
 21         super(context, null);
 22     }
 23 
 24     public TestSufaceView(Context context, AttributeSet attrs) {
 25         super(context, attrs);
 26 
 27         holder = this.getHolder();
 28         holder.addCallback(this);
 29         myThread = new MyThread(holder);//创建一个绘图线程
 30 
 31     }
 32 
 33 
 34     /**
 35      * @param holder 在创建时激发,一般在这里调用画图的线程
 36      */
 37     @Override
 38     public void surfaceCreated(SurfaceHolder holder) {
 39 
 40         myThread.isRun = true;
 41         myThread.start();
 42     }
 43 
 44     /**
 45      * @param holder
 46      * @param format
 47      * @param width
 48      * @param height 在surface的大小发生改变时激发
 49      */
 50     @Override
 51     public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
 52 
 53     }
 54 
 55     /**
 56      * @param holder 销毁时激发,一般在这里将画图的线程停止、释放
 57      */
 58     @Override
 59     public void surfaceDestroyed(SurfaceHolder holder) {
 60 
 61         myThread.isRun = false;
 62     }
 63 
 64     //线程内部类
 65     class MyThread extends Thread {
 66         private SurfaceHolder holder;
 67         public boolean isRun;
 68 
 69         public MyThread(SurfaceHolder holder) {
 70             this.holder = holder;
 71             isRun = true;
 72         }
 73 
 74         @Override
 75         public void run() {
 76             int count = 0;
 77             while (isRun) {
 78                 Canvas c = null;
 79                 try {
 80                     synchronized (holder) {
 81                         c = holder.lockCanvas();//锁定画布,一般在锁定后就可以通过其返回的画布对象Canvas,在其上面画图等操作了。
 82                         c.drawColor(Color.BLACK);//设置画布背景颜色
 83                         Paint p = new Paint(); //创建画笔
 84                         p.setColor(Color.WHITE);
 85                         Rect r = new Rect(100, 50, 300, 250);
 86                         c.drawRect(r, p);
 87                         c.drawText("这是第" + (count++) + "秒", 100, 310, p);
 88                         Thread.sleep(1000);//睡眠时间为1秒
 89                     }
 90                 }
 91                 catch(Exception e){
 92                     e.printStackTrace();
 93                     } finally
 94                 {
 95                     if (c != null)
 96                     {
 97                         holder.unlockCanvasAndPost(c);//结束锁定画图,并提交改变。
 98                         }
 99                     }
100                 }
101             }
102 
103     }
104 }

 

SurfaceView的简单使用

标签:

原文地址:http://www.cnblogs.com/yoyohong/p/5867768.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!