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>
- Android碰撞检测——Region碰撞检查
- Android碰撞检测——圆形检查
- Android碰撞检测——矩形检查
- Android碰撞检测——多矩形检查
- Android碰撞检测——多矩形检查
- android Region碰撞
- 碰撞检测一重奏——长方体碰撞检测
- 碰撞检测第二重奏——胶囊体碰撞检测
- android 游戏 碰撞检测
- android碰撞检测
- 碰撞检查
- 第五章——如何检测碰撞
- 碰撞检测—云风的分析
- 碰撞检测—分离轴理论
- 碰撞检测
- 碰撞检测
- 碰撞检测
- 碰撞检测
- HibernateTemplate中HibernateCallback的事务
- 排序算法
- C中链表的几种算法实现(持续中……)
- 特征值和特征向量的几何和物理意义
- 初识压缩感知Compressive Sensing
- Android碰撞检测——Region碰撞检查
- JSP跳转中request共享问题
- ubuntu_文件,目录
- c语言c++的内存分配
- wince软件实现重启待机
- WinCE Network驱动开发简介
- 中英文标点符号的读法用法大全
- 如何修改wince(s3c2410)的MAC地址
- 成为优秀的程序员真不简单