zoukankan      html  css  js  c++  java
  • Android碰撞检测——Region碰撞检查

    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;
        }
    
    }
  • 相关阅读:
    Django 支付宝付款接口的使用
    Django 处理跨域的配置、前台处理ajax
    pip安装源
    Django 缓存机制
    Django 配置使用日志
    Celery框架的基本使用方法
    python 虚拟环境的搭建
    Django 后台管理xadmin
    Python学习之路_day_16(模块搜索路径,开发规范)
    Python学习之路_day_15(模块)
  • 原文地址:https://www.cnblogs.com/cindyOne/p/3002743.html
Copyright © 2011-2022 走看看