/**
* 计算重叠面积。如果返回大于0,表示view1与view2有碰撞。
* @param view1
* @param view2
* @return 重叠面积
*/
public float overlayArea(View view1,View view2){
float area=0;
if(view1!=null && view2!=null){
//view2-左上a,右上b,左下c,右下d
//view1-左上e,右上f,左下g,右下h
//重叠部分-左上w,右上x,左下y,右下z
//view2
float width2=view2.getWidth();
float height2=view2.getHeight();
float ax=view2.getX();
float ay=view2.getY();
float bx=ax+width2;
// float by=ay;
// float cx=ax;
float cy=ay+height2;
// float dx=ax+width2;
// float dy=ay+height2;
//view1
float width1=view1.getWidth();
float height1=view1.getHeight();
float ex=view1.getX();
float ey=view1.getY();
float fx=ex+width1;
// float fy=ey;
// float gx=ex;
float gy=ey+height1;
// float hx=ex+width1;
// float hy=ey+height1;
if(bx<ex || fx<ax || cy<ey || gy<ay){
//没有重叠部分
}else{
//重叠部分
float wx=ax>ex?ax:ex;
float wy=ay>ey?ay:ey;
float xx=bx<fx?bx:fx;
// float xy=by>fy?by:fy;
// float yx=cx>gx?cx:gx;
float yy=cy<gy?cy:gy;
// float zx=dx<hx?dx:hx;
// float zy=dy<hy?dy:hy;
//计算重叠面积
float width=xx-wx;
float height=yy-wy;
area=width*height;
}
}
return area;
}
View 碰撞检测
最新推荐文章于 2025-02-08 16:20:26 发布