2

У меня есть 2 вида в android, и они dragable.I хочу обнаружить столкновение между ними. В настоящее время я использую этот код для обнаружения столкновения, но я не думаю, что он работает. Пожалуйста, предложите, что нужно для проверки столкновения.Столкновение между 2 видами в android

public boolean onTouch(View view, MotionEvent event) { 
    final int X = (int) event.getRawX(); 
    final int Y = (int) event.getRawY(); 
    switch (event.getAction() & MotionEvent.ACTION_MASK) { 
    case MotionEvent.ACTION_DOWN: 
     RelativeLayout.LayoutParams lParams = (RelativeLayout.LayoutParams) view 
       .getLayoutParams(); 

     _xDelta = X - lParams.leftMargin; 
     _yDelta = Y - lParams.topMargin; 
     break; 
    case MotionEvent.ACTION_UP: 
     break; 
    case MotionEvent.ACTION_POINTER_DOWN: 
     break; 
    case MotionEvent.ACTION_POINTER_UP: 
     break; 
    case MotionEvent.ACTION_MOVE: 
     RelativeLayout.LayoutParams ParamsA = (RelativeLayout.LayoutParams) view 
       .getLayoutParams(); 
     ParamsA.leftMargin = X - _xDelta; 
     ParamsA.topMargin = Y - _yDelta; 
     ParamsA.rightMargin = -250; 
     ParamsA.bottomMargin = -250; 

     for (int i = 0; i < balls.size(); i++) { 
      if (balls.get(i).getTag() != view.getTag()) { 
       RelativeLayout.LayoutParams ParamsB = (RelativeLayout.LayoutParams) balls 
         .get(i).getLayoutParams(); 

       Rect b = new Rect(ParamsB.leftMargin,ParamsB.topMargin,ParamsB.rightMargin,ParamsB.bottomMargin); 
       Rect a = new Rect(ParamsA.leftMargin,ParamsA.topMargin,ParamsA.rightMargin,ParamsA.bottomMargin); 


       if(a.intersect(b)) 
       { 
        Toast.makeText(getApplicationContext(), "Collision Detected", Toast.LENGTH_SHORT).show(); 
       } 
      } 

     } 

     view.setLayoutParams(ParamsA); 
     break; 
    } 
    // _root.invalidate(); 
    return true; 
} 

«шарики» - это массив типа «Вид», который лежит на экране.

ответ

4

Я только что нашел решение сам, он отлично работает во всех случаях.

public boolean CheckCollision(View v1,View v2) { 
    Rect R1=new Rect(v1.getLeft(), v1.getTop(), v1.getRight(), v1.getBottom()); 
    Rect R2=new Rect(v2.getLeft(), v2.getTop(), v2.getRight(), v2.getBottom()); 
    return R1.intersect(R2); 
} 
Смежные вопросы