Android碰撞检测——Region碰撞检查

来源:互联网 发布:浏览器广告拦截软件 编辑:程序博客网 时间:2024/06/10 12:25

Region碰撞检测   

Region类在android开发中经常用到,特别是该类的一个判断点是否在矩形区域内的函数——Region.contains(int x,int y)经常用到。

      下面来一个例子:

package com.example.collidedemo;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Paint.Style;import android.graphics.Rect;import android.graphics.Region;import android.util.Log;import android.view.MotionEvent;import android.view.SurfaceHolder;import android.view.SurfaceHolder.Callback;import android.view.SurfaceView;public class RegionSurfaceView extends SurfaceView implements Callback,Runnable {    Paint paint;    SurfaceHolder surfaceHolder;    Thread thread;    boolean flag;    int sleeptime=100;    boolean isCollsion;    /*定义一个矩形*/    Rect rect=new Rect(0, 0, 100, 100);    /*定义一个Region*/    Region region=new Region(rect);    public RegionSurfaceView(Context context) {        super(context);        paint=new Paint();        paint.setStyle(Style.STROKE);        paint.setAntiAlias(true);        surfaceHolder=getHolder();        surfaceHolder.addCallback(this);            thread=new Thread(this);    }        private void mydraw(Canvas canvas){        canvas.drawColor(Color.WHITE);        canvas.drawRect(rect, paint);        if(isCollsion){            paint.setColor(Color.RED);            canvas.drawText("点击碰撞了", 10, 10, paint);        }        else{            paint.setColor(Color.BLACK);            canvas.drawText("没有碰撞了", 10, 10, paint);        }    }            /**     * 触点事件     */    @Override    public boolean onTouchEvent(MotionEvent event){        if(region.contains((int)event.getX(), (int)event.getY())){            isCollsion=true;        }        else{            isCollsion=false;        }        return super.onTouchEvent(event);    }        @Override    public void run() {        Canvas canvas=null;        while (flag) {            try {                canvas=surfaceHolder.lockCanvas();                synchronized (canvas) {                    mydraw(canvas);                }            } catch (Exception e) {                Log.e("region",e.getMessage());            }            finally{                if(canvas!=null){                    surfaceHolder.unlockCanvasAndPost(canvas);                }            }            try {                Thread.sleep(sleeptime);            } catch (Exception e) {                Log.e("region",e.getMessage());            }        }            }    @Override    public void surfaceCreated(SurfaceHolder holder) {        flag=true;        if(!thread.isAlive()){            thread.start();        }    }    @Override    public void surfaceChanged(SurfaceHolder holder, int format, int width,            int height) {        // TODO Auto-generated method stub            }    @Override    public void surfaceDestroyed(SurfaceHolder holder) {        flag=true;    }}

 


<script type="text/javascript"><!--google_ad_client = "ca-pub-1944176156128447";/* cnblogs 首页横幅 */google_ad_slot = "5419468456";google_ad_width = 728;google_ad_height = 90;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>