Android游戏开发使用View还是SurfaceView(2)

来源:未知 责任编辑:责任编辑 发表时间:2014-05-26 10:58 点击:

import android.view.SurfaceView;

public class Test extends Activity {
  public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(new MyView(this));
  }
   
  //内部类
  class MyView extends SurfaceView implements SurfaceHolder.Callback{

  SurfaceHolder holder;
public MyView(Context context) {
  super(context);
  holder = this.getHolder();//获取holder
  holder.addCallback(this);
  //setFocusable(true);
   
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
   
}

@Override
public void surfaceCreated(SurfaceHolder holder) {
  new Thread(new MyThread()).start();
}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
   
}

//内部类的内部类
class MyThread implements Runnable{

  @Override
  public void run() {
  Canvas canvas = holder.lockCanvas(null);//获取画布
  Paint mPaint = new Paint();
  mPaint.setColor(Color.BLUE);
   
  canvas.drawRect(new RectF(40,60,80,80), mPaint);
  holder.unlockCanvasAndPost(canvas);//解锁画布,提交画好的图像
   
  }
   
}
   
  }
}

访问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可以多线程访问,在多线程中画图。


import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class MySurfaceView extends SurfaceView implements SurfaceHolder.Callback {


private Context mContext;
private SurfaceHolder mHolder;

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • Android 完全退出程序
  • 原创:Android应用开发-Andorid歌词秀,含源码
  • android 屏幕保护
  • Android手机软件汉化教程---第四课 dex文件汉化
  • 众多Android 开源项目推荐,给力工作给力学习
  • Android Audio代码分析4
  • Android得到已安装的应用程序信息!
  • Android开发者指南(29) —— USB Host and Accessory
  • Android成长的幕后推手:工程师鲁宾
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1