安卓飞机大战(二) SurfaceView实现自制背景
2015-08-16 17:50
309 查看
用SurfaceView写一个自制的背景图,并且可以移动,加上安卓飞机大战(一)中的BackgroundManager类,可以直接使用
GameView代码:
public class GameView extends SurfaceView implements SurfaceHolder.Callback,Runnable{
private SurfaceHolder hd=null;
private Canvas canvas=null;
private BackgroundManager backgroundmanager;
public GameView(Context context) {
super(context);
this.setFocusable(true);
hd=this.getHolder();
hd.addCallback(this);
}
public void run() {
while(isrunning){
mydraw();
try {
Thread.sleep(100);//每100s刷新一次屏幕
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public void mydraw(){
try{
if(hd!=null){
canvas=hd.lockCanvas();
canvas.drawColor(Color.BLUE);
backgroundmanager.drawbackground(canvas);
}catch(Exception e){
e.printStackTrace();
}finally{
if(canvas!=null)
hd.unlockCanvasAndPost(canvas);
}
}
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
// TODO Auto-generated method stub
}
public void surfaceCreated(SurfaceHolder arg0) {
thread=new Thread(this);//定义一个新线程
thread.start();
backgroundmanager=new BackgroundManager(this);
}
@Override
public void surfaceDestroyed(SurfaceHolder arg0) {
}
MainActivity 代码:
public class MainActivity extends Activity {
private GameView gameview=null;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
gameview=new GameView(this);
setContentView(gameview);
}
这样就能实现背景的循环移动了,layout中的xml文件直接不用管。
GameView代码:
public class GameView extends SurfaceView implements SurfaceHolder.Callback,Runnable{
private SurfaceHolder hd=null;
private Canvas canvas=null;
private BackgroundManager backgroundmanager;
public GameView(Context context) {
super(context);
this.setFocusable(true);
hd=this.getHolder();
hd.addCallback(this);
}
public void run() {
while(isrunning){
mydraw();
try {
Thread.sleep(100);//每100s刷新一次屏幕
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public void mydraw(){
try{
if(hd!=null){
canvas=hd.lockCanvas();
canvas.drawColor(Color.BLUE);
backgroundmanager.drawbackground(canvas);
}catch(Exception e){
e.printStackTrace();
}finally{
if(canvas!=null)
hd.unlockCanvasAndPost(canvas);
}
}
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
// TODO Auto-generated method stub
}
public void surfaceCreated(SurfaceHolder arg0) {
thread=new Thread(this);//定义一个新线程
thread.start();
backgroundmanager=new BackgroundManager(this);
}
@Override
public void surfaceDestroyed(SurfaceHolder arg0) {
}
MainActivity 代码:
public class MainActivity extends Activity {
private GameView gameview=null;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
gameview=new GameView(this);
setContentView(gameview);
}
这样就能实现背景的循环移动了,layout中的xml文件直接不用管。
相关文章推荐
- [转载]Activity中ConfigChanges属性的用法
- android之定时器AlarmManager
- Android java 与 javascript互访(相互调用)的方法例子
- Web布局连载——两栏固定布局(五)
- android上改变listView的选中颜色
- 转载:On having layout
- Android提高之SurfaceView的基本用法实例分析
- Android中layout属性大全
- Android提高之SurfaceView与多线程的混搭实例
- android layout XML解析错误的解决方法
- 基于Android LayoutInflater的使用介绍
- zend Framework中的Layout(模块化得布局)详解
- Auto Layout on iOS Versions prior to 6.0 解决办法
- Android布局
- 关于SurfaceView的问题
- layoutSubviews 详解
- LayoutInflater与findViewById的用法
- SimpleCursorAdapter类与数据绑定
- LayoutInflater的使用