Как кратко указано в topi c, я пытаюсь обнаружить столкновения двух изображений, которые я показываю в приложении, которое отображается поверх всего, как сервис плавающих виджетов.
Мой первый просмотр изображений p:
p = new ImageView(this);
p.setImageResource(R.drawable.k);
pp = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT);
pp.gravity = Gravity.TOP | Gravity.LEFT;
pp.x = 100; pp.y = 100;
window.addView(p,pp);
// ============= makes it a button for dragging and stuff //
p.setOnTouchListener(new View.OnTouchListener() {
private int initialX;
private int initialY;
private float initialTouchX;
private float initialTouchY;
@Override
public boolean onTouch(View arg0, MotionEvent event) {
if (gestureDetector.onTouchEvent(event)) {
//detect tap
return true;
} else {
// detects move and drag
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
initialX = pp.x;
initialY = pp.y;
initialTouchX = event.getRawX();
initialTouchY = event.getRawY();
return true;
case MotionEvent.ACTION_UP:
return true;
case MotionEvent.ACTION_MOVE:
pp.x = initialX + (int) (event.getRawX() - initialTouchX);
pp.y = initialY + (int) (event.getRawY() - initialTouchY);
windowManager.updateViewLayout(p, pp);
return true;
}
return false;
}
}
});
Так же, как это я сделал еще один просмотр изображений q. Таким образом, я могу свободно перетаскивать эти два изображения.
Затем, пытаясь обнаружить столкновения с этими двумя изображениями, я попробовал 3 способа, которые я нашел здесь на stackoverflow.
Например:
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);
}
public boolean chk(ImageView v1,ImageView v2) {
Rect R1=new Rect();
v1.getDrawingRect(R1);
Rect R2=new Rect();
v2.getDrawingRect(R2);
return Rect.intersects(R1,R2);
}
public boolean chkm(ImageView v1,ImageView v2) {
Rect R1=new Rect();
v1.getHitRect(R1);
Rect R2=new Rect();
v2.getHitRect(R2);
return R1.intersect(R2);
}
Независимо от того, что я пробую, они всегда дают мне «истину» в начале приложения, во время перетаскивания или после перетаскивания, когда Я могу безошибочно определять координаты каждого изображения.
Если кто-нибудь может помочь мне исправить, вероятно, глупую ошибку, которую я допустил, это было бы очень признательно>. <</p>
Заранее спасибо!