Android游戏开发使用View还是SurfaceView(2)
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;
	
相关新闻>>
- 发表评论
- 
				
- 最新评论 进入详细评论页>>





