实例代码:

import android.app.Activity;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Rect;import android.os.Bundle;import android.view.Menu;import android.view.SurfaceHolder;import android.view.SurfaceView;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(new MyView(this));}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}/** * surfaceview的实例,用来处理贴图问题 */class MyView extends SurfaceView implements SurfaceHolder.Callback {private SurfaceHolder holder;private MyThread myThread; // 处理绘图的线程public MyView(Context context) {super(context);// TODO Auto-generated constructor stubholder = this.getHolder(); // 获得SurfaceHodler对象holder.addCallback(this); // 添加回调方法myThread = new MyThread(holder); // 创建处理绘图的线程}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {// TODO Auto-generated method stub}@Overridepublic void surfaceCreated(SurfaceHolder holder) {// TODO Auto-generated method stubmyThread.isRun = true;myThread.start();}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {// TODO Auto-generated method stubmyThread.isRun = false;}}public class MyThread extends Thread {public boolean isRun;private SurfaceHolder holder;public MyThread(SurfaceHolder holder) {this.holder = holder;isRun = true;}@Overridepublic void run() {int count = 0;while (isRun) {Canvas c = null;try {synchronized (holder) {c = holder.lockCanvas();c.save();// 保存当前绘图环境c.drawColor(Color.BLACK); // 设置画布背景黑色Paint p = new Paint(); // 创建画壁p.setColor(Color.WHITE);Rect r = new Rect(100, 50, 300, 250);c.drawRect(r, p);c.drawText("This is the " + (count++) + " seconds",100, 310, p);c.restore(); // 恢复先前绘图环境Thread.sleep(1000); // sleep 1 second}} catch (Exception e) {e.printStackTrace();} finally {if(c!= null){holder.unlockCanvasAndPost(c); // 结束锁定画布,并提交改变}}}}}}


上面的代码从整体的使用方面给出了实例,接下来进行逐步分解。

1. 首先是声明一个继承SurfaceView并且实现SurfaceHolder.CallBack的子类

class MyView extends SurfaceView implements SurfaceHolder.Callback {                  @Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {// TODO Auto-generated method stub}@Overridepublic void surfaceCreated(SurfaceHolder holder) {// TODO Auto-generated method stub}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {// TODO Auto-generated method stub}

2. 在子类中获得一个用于控制suerfce对象的surfaceHolder对象

holder = SurfaceView.getHodler();holder.addCallback()

3. 在surfaceCreated方法中调用处理绘图线程,并将holder对象传递给绘图线程

4. 绘图线程中处理步骤:

//首先获得canvas对象Canvas c = holder.lockCanvas();c.store();......//解锁并提交改变c.restore();holder.unlockCanvasAndPost(c);

更多相关文章

  1. 类和 Json对象
  2. android camera 通过onPreviewFrame采集视频
  3. Android实现DES对字符串加密
  4. Android(安卓)Exception异常汇集【不定时更新】
  5. android源码阅读--线程间通信Handler消息机制
  6. android:Service
  7. Android的support v4中的Fragment的一个Bug
  8. android 顶部的通知栏
  9. Android--登录界面(demo)

随机推荐

  1. Android(安卓)ORM 和 ContentProvider对
  2. 分析Android的Linux内核
  3. 使用Android Studio开发Android APP
  4. Android之AIDL实现两个app的调用以及双进
  5. android 应用对内存是如何限制的?我们应
  6. android phonegap插件开发方法 plugin
  7. Android(安卓)多进程
  8. 使用Zipalign工具优化Android(安卓)APK应
  9. Android下基于XML的 Graphics
  10. AndroidTouch事件的传递、拦截、消费分析