android碰撞检测

两个矩形,拖动其中一个矩形向另外一个移动,当发生碰撞时两个矩形同时变为红色:



import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.support.v4.app.NotificationCompatSideChannelService;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

/**
 * Created by lijia on 2017/5/25.
 */

public class lesson6 extends SurfaceView implements SurfaceHolder.Callback,Runnable  {
    private int bx,by,dx,dy,rw,rh;
    private Canvas canvas;
    private Paint paint1,paint2;
    private Thread th;
    private  boolean runFlag;
    private SurfaceHolder sfh;
    private Rect rect1,rect2;
    public lesson6(Context context) {

        super(context);
        sfh=this.getHolder();
        sfh.addCallback(this);
        paint1=new Paint();
        paint2=new Paint();
         bx=100;
         by=100;
         rw=200;
         rh=200;
         dx=0;
         dy=0;

    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        th=new Thread(this);
        runFlag=true;
        th.start();
    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {

    }

    @Override
    public void run() {

        while(runFlag)
        {
            gameDraw();
        }
    }

    public void gameDraw()
    {
        canvas=sfh.lockCanvas();
        canvas.drawColor(Color.WHITE);
        rect1=new Rect(bx,by,bx+rw,by+rh);
        rect2=new Rect(300,300,500,500);
        paint1.setColor(Color.GREEN);
        canvas.drawRect(rect2,paint2);
       if (rect2.intersect(rect1))
       {
           paint1.setColor(Color.RED);
           canvas.drawRect(bx,by,bx+rw,by+rh,paint1);
           paint2.setColor(Color.RED);
           canvas.drawRect(rect2,paint2);

       }else
       {


           paint1.setColor(Color.BLUE);
           //  rect1=new Rect(bx,by,bx+rw,by+rh);
           canvas.drawRect(rect1,paint1);
           paint2.setColor(Color.GREEN);
           canvas.drawRect(rect2,paint2);
       }

        sfh.unlockCanvasAndPost(canvas);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        Rect r=new Rect(bx,by,bx+rw,by+rh);
        if(r.contains((int)event.getX(),((int)event.getY())))
        {
            if (event.getAction()==MotionEvent.ACTION_MOVE)
            {
                bx=dx+(int)event.getX();
                by=dy+(int)event.getY();

            }else
            {
                dx=bx-(int)event.getX();
                dy=by-(int)event.getY();

            }
        }
        return  true;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值