首先看一下标准界面
直接上代码,demo下载地址
http://download.csdn.net/detail/controlsxxf/5058548点击打开链接
现在有个问题 ,就是在这个实现主要是继承了SurfaceView类,可是在SurfaceView类中是不能添加控件的,想要添加控件的话请看这里:
在你需要这个界面的xml文件中添加一个FrameLayout
<FrameLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1" >
<xf.eat.GameView
android:id="@+id/view3d"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
</FrameLayout>
代码中 xf.eat.GameView 换成你自己放GaveView类的包名,实现后就如下图所示,分成了三个部分,由红色线分开,第一部分是一个Layout,其中有TextView,第二部分是源代码中的GameView,第三部分是一个Layout,里面是一个Button,其中 蝴蝶是我把小球换成了蝴蝶
为了保证小球能在画布里像运动一样,需要每次都重新绘制,代码如下:
canvas = this.holder.lockCanvas();// 获取当前画布
canvas.drawColor(Color.WHITE);// 清屏
mBall.draw(canvas, paint);
这样做了以后,每次都是用白色重新绘制了画布,不能实现自定义背景,但是如果我们给这个canvas添加一个背景图片你会发现,小球动的慢死,因为你每次都用一张图片去重新绘制,所以浪费资源
所以我想到的办法就是让canvas背景变成透明色,这样只需要在总的layout下添加一个背景即可实现canvas背景透明的方法 改掉第二句话:
canvas=this.holder.lockCanvas();//获取当前的画布
canvas.drawColor(Color.TRANSPARENT,Mode.CLEAR);//清理屏幕
Paint cleanPaint=new Paint();
cleanPaint.setXfermode(new PorterDuffXfermode(Mode.CLEAR));
canvas.drawPaint(cleanPaint);
cleanPaint.setXfermode(new PorterDuffXfermode(Mode.SRC));
mBall.draw(canvas,paint);
这样做就可以了;
先写这些 canvas和SurfaceView的知识以后在补上