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

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

 

先看效果:

 


 


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

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

 

Java代码   收藏代码
  1. public GameSurfaceView(Context context, AttributeSet attrs){  
  2.     super(context,attrs);  
  3. }  

 

Java代码   收藏代码
  1. <dk.game.GameSurfaceView android:id="@+id/gameView"  
  2.  android:layout_width="fill_parent"  
  3.  android:layout_height="fill_parent"/>  
 

 

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

 

Java代码   收藏代码
  1. @Override  
  2.    public void onCreate(Bundle savedInstanceState) {  
  3.        super.onCreate(savedInstanceState);  
  4.        requestWindowFeature(Window.FEATURE_NO_TITLE);  
  5.        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);  
  6.        setContentView(R.layout.main);  
  7.    }  
  8.    /** 
  9.     * 下一张按钮事件 
  10.     * @param view 
  11.     */  
  12.    public void nextBt(View view){  
  13.     GameSurfaceView.cn=2;  
  14.    }  
  15.    /** 
  16.     * 上一张按钮事件 
  17.     * @param view 
  18.     */  
  19.    public void preBt(View view){  
  20.     GameSurfaceView.cn=1;  
  21.    }  
 

3.在Layout中是相对布局

 

Java代码   收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.       android:id="@+id/relativeLayout1"  
  4.       android:layout_width="fill_parent"  
  5.       android:layout_height="fill_parent" >  
  6.          
  7.        <dk.game.GameSurfaceView android:id="@+id/gameView"  
  8.            android:layout_width="fill_parent"  
  9.            android:layout_height="fill_parent"/>  
  10.       
  11.        <Button  
  12.            android:id="@+id/nextBt"  
  13.            android:layout_width="wrap_content"  
  14.            android:layout_height="wrap_content"  
  15.            android:layout_alignParentRight="true"  
  16.            android:layout_alignParentBottom="true"  
  17.            android:text="下一张"   
  18.            android:onClick="nextBt" />  
  19.          
  20.        <Button  
  21.            android:id="@+id/preBt"  
  22.            android:layout_width="wrap_content"  
  23.            android:layout_height="wrap_content"  
  24.            android:layout_toLeftOf="@id/nextBt"  
  25.            android:layout_alignParentBottom="true"  
  26.            android:text="上一张"   
  27.            android:onClick="preBt" />  
  28.          
  29. </RelativeLayout>  
 

GameSurfaceView类的源码如下

 

Java代码   收藏代码
  1. package dk.game;  
  2.   
  3. import android.content.Context;  
  4. import android.content.res.Resources;  
  5. import android.graphics.Bitmap;  
  6. import android.graphics.BitmapFactory;  
  7. import android.graphics.Canvas;  
  8. import android.graphics.Color;  
  9. import android.graphics.Paint;  
  10. import android.util.AttributeSet;  
  11. import android.util.Log;  
  12. import android.view.SurfaceHolder;  
  13. import android.view.SurfaceView;  
  14.   
  15. public class GameSurfaceView extends SurfaceView implements Runnable ,SurfaceHolder.Callback{  
  16.       
  17.     private Thread gameViewThread;  
  18.     private SurfaceHolder surfaceHolder;  
  19.     private Paint paint;  
  20.     private boolean runFlag=false;  
  21.     public static int screen_width,screen_height;  
  22.     protected Resources resources;  
  23.     private Canvas canvas;  
  24.     private Bitmap bmp_bg1,bmp_bg2;  
  25.     public static int cn=1;  
  26.       
  27.     public GameSurfaceView(Context context, AttributeSet attrs){  
  28.         super(context,attrs);  
  29.         init();  
  30.     }  
  31.       
  32.       
  33.     public GameSurfaceView(Context context) {  
  34.         super(context);  
  35.         init();  
  36.     }  
  37.       
  38.     private void init(){  
  39.         surfaceHolder=getHolder();  
  40.         surfaceHolder.addCallback(this);  
  41.         resources=getResources();  
  42.           
  43.         paint=new Paint();  
  44.         paint.setAntiAlias(true);  
  45.           
  46.         bmp_bg1=BitmapFactory.decodeResource(getResources(), R.drawable.bg1);  
  47.         bmp_bg2=BitmapFactory.decodeResource(getResources(), R.drawable.bg2);  
  48.     //  setFocusable(true);  
  49.     //  setFocusableInTouchMode(true);  
  50.     //  setClickable(true);  
  51.         setKeepScreenOn(true);  
  52.     }  
  53.       
  54.     public void draw(Canvas canvas,Paint paint){  
  55.         canvas.drawColor(Color.BLACK);  
  56.         if(cn==1){  
  57.             canvas.drawBitmap(bmp_bg1, 0,0, paint);  
  58.         }else if(cn==2){  
  59.             canvas.drawBitmap(bmp_bg2, 0,0, paint);   
  60.         }  
  61.     }  
  62.   
  63.     @Override  
  64.     public void run() {  
  65.         while(runFlag){  
  66.             try{  
  67.                 canvas=surfaceHolder.lockCanvas();  
  68.                 long startTime=System.currentTimeMillis();  
  69.                 canvas.drawColor(Color.BLACK);  
  70.                 draw(canvas,paint);  
  71.                 long endTime=System.currentTimeMillis();  
  72.                 if(50>(endTime-startTime)){  
  73.                     Thread.sleep(50-(endTime-startTime));  
  74.                 }  
  75.             }catch (Exception e) {  
  76.                 Log.e("Error""刷新屏幕出错!"+e);  
  77.             }finally{  
  78.                 if(canvas!=null){  
  79.                     surfaceHolder.unlockCanvasAndPost(canvas);  
  80.                 }  
  81.             }  
  82.         }  
  83.     }  
  84.   
  85.     @Override  
  86.     public void surfaceCreated(SurfaceHolder holder) {  
  87.         screen_width=getWidth();  
  88.         screen_height=getHeight();  
  89.         runFlag=true;  
  90.         gameViewThread=new Thread(this);  
  91.         gameViewThread.start();  
  92.     }  
  93.   
  94.     @Override  
  95.     public void surfaceDestroyed(SurfaceHolder holder) {  
  96.         runFlag=false;  
  97.     }  
  98.   
  99.     @Override  
  100.     public void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {}  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值