首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络游戏 >

Android游戏开发学习(五)-实现Button悬浮于与SurfaceView之上

2012-08-01 
Android游戏开发学习(5)--实现Button悬浮于与SurfaceView之上实现Button悬浮于与SurfaceView之上实现?先看

Android游戏开发学习(5)--实现Button悬浮于与SurfaceView之上

实现Button悬浮于与SurfaceView之上实现

?

先看效果:

?

Android游戏开发学习(五)-实现Button悬浮于与SurfaceView之上


Android游戏开发学习(五)-实现Button悬浮于与SurfaceView之上

?


注意:你实现的SurfaceView和android中的Button,EditView是同级的,不能把一个包含在另一个里面

1.创建自己的SurfaceView类,一定要实现2个参数的那个函数,因为你要在XMl中使用,第二个参数指的自定义的组件的一些属性长宽等。

?

public GameSurfaceView(Context context, AttributeSet attrs){super(context,attrs);}

?

       <dk.game.GameSurfaceView android:id="@+id/gameView"       android:layout_width="fill_parent"       android:layout_height="fill_parent"/>
?

?

2.处理SurfaceView中事件一定要在Activity中。我们在xml中定义我们的surfaceview 和 组件button、textview等等的时候 他们是同一级别的!!而不是把button包含在surfaceview里,所以虽然在surfaceview中可以根据id索引到button但绑定的时候是无法找到button的,只有我们的 activitysetContentView(R.layout.main); 显示的button,所以只能在显示它的activity中去绑定,这里需要注意

?

 @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        requestWindowFeature(Window.FEATURE_NO_TITLE);        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);        setContentView(R.layout.main);    }    /**     * 下一张按钮事件     * @param view     */    public void nextBt(View view){    GameSurfaceView.cn=2;    }    /**     * 上一张按钮事件     * @param view     */    public void preBt(View view){    GameSurfaceView.cn=1;    }
?

3.在Layout中是相对布局

?

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"      android:id="@+id/relativeLayout1"      android:layout_width="fill_parent"      android:layout_height="fill_parent" >              <dk.game.GameSurfaceView android:id="@+id/gameView"       android:layout_width="fill_parent"       android:layout_height="fill_parent"/>           <Button       android:id="@+id/nextBt"       android:layout_width="wrap_content"       android:layout_height="wrap_content"       android:layout_alignParentRight="true"       android:layout_alignParentBottom="true"       android:text="下一张"        android:onClick="nextBt" />              <Button       android:id="@+id/preBt"       android:layout_width="wrap_content"       android:layout_height="wrap_content"       android:layout_toLeftOf="@id/nextBt"       android:layout_alignParentBottom="true"       android:text="上一张"        android:onClick="preBt" />       </RelativeLayout>
?

GameSurfaceView类的源码如下

?

package dk.game;import android.content.Context;import android.content.res.Resources;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.util.AttributeSet;import android.util.Log;import android.view.SurfaceHolder;import android.view.SurfaceView;public class GameSurfaceView extends SurfaceView implements Runnable ,SurfaceHolder.Callback{private Thread gameViewThread;private SurfaceHolder surfaceHolder;private Paint paint;private boolean runFlag=false;public static int screen_width,screen_height;protected Resources resources;private Canvas canvas;private Bitmap bmp_bg1,bmp_bg2;public static int cn=1;public GameSurfaceView(Context context, AttributeSet attrs){super(context,attrs);init();}public GameSurfaceView(Context context) {super(context);init();}private void init(){surfaceHolder=getHolder();surfaceHolder.addCallback(this);resources=getResources();paint=new Paint();paint.setAntiAlias(true);bmp_bg1=BitmapFactory.decodeResource(getResources(), R.drawable.bg1);bmp_bg2=BitmapFactory.decodeResource(getResources(), R.drawable.bg2);//setFocusable(true);//setFocusableInTouchMode(true);//setClickable(true);setKeepScreenOn(true);}public void draw(Canvas canvas,Paint paint){canvas.drawColor(Color.BLACK);if(cn==1){canvas.drawBitmap(bmp_bg1, 0,0, paint);}else if(cn==2){canvas.drawBitmap(bmp_bg2, 0,0, paint);}}@Overridepublic void run() {while(runFlag){try{canvas=surfaceHolder.lockCanvas();long startTime=System.currentTimeMillis();canvas.drawColor(Color.BLACK);draw(canvas,paint);long endTime=System.currentTimeMillis();if(50>(endTime-startTime)){Thread.sleep(50-(endTime-startTime));}}catch (Exception e) {Log.e("Error", "刷新屏幕出错!"+e);}finally{if(canvas!=null){surfaceHolder.unlockCanvasAndPost(canvas);}}}}@Overridepublic void surfaceCreated(SurfaceHolder holder) {screen_width=getWidth();screen_height=getHeight();runFlag=true;gameViewThread=new Thread(this);gameViewThread.start();}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {runFlag=false;}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {}}
?

?

源码下载:

?

?

?

?

热点排行