У меня есть куча просмотров с цельноцветными фонами. Эти взгляды можно перетаскивать; Я хотел бы изменить фон в зависимости от того, пересекается или нет вид с другим видом. Ниже приведен код, я использую в MotionEvent.ACTION_UP
Странная проблема с меняющимся цветом фона обзора
// Get all children of the parent view
for(int i = 0; i < ((ViewGroup) getParent()).getChildCount(); i++) {
View childOne = ((ViewGroup) getParent()).getChildAt(i);
// For each child, check for intersection with siblings
for(int z = 0; z < ((ViewGroup) getParent()).getChildCount(); z++) {
View childTwo = ((ViewGroup) getParent()).getChildAt(z);
if(childOne == childTwo)
continue;
Rect recOne = new Rect();
childOne.getHitRect(recOne);
Rect recTwo = new Rect();
childTwo.getHitRect(recTwo);
if (Rect.intersects(recOne, recTwo)) {
((EditView) childTwo).setPaintColor(Color.RED);
} else {
((EditView) childTwo).setPaintColor(Color.GREEN);
}
}
}
Это должно петли через каждый вид и проверить, если вид пересекается с другой точкой зрения. Если это так, измените цвет фона пересекающегося вида. Все виды расширяют класс EditView
, который обрабатывает свои собственные события касания. Я должен также упомянуть, что MotionEvent.ACTION_DOWN
приносит касание к «фронту», поэтому пользователь может легко манипулировать им, если он скрыт за другим видом. Ниже объясняется, как в настоящее время он работает:
Эти взгляды изложены с использованием RelativeLayout
. Я начинаю думать, что причиной этого может быть упорядочение взглядов, но я не уверен.
Спасибо за подсказку! Думаю, я тоже выяснил этот вопрос. При переходе через представления, если представление не пересекается с представлением, оно будет изменено на зеленый, независимо от того, пересекается ли оно с другим видом или нет. Мне нужно найти способ обойти это. – Raggeth
@ Raggeth Я действительно не рассматривал случай, который вы только что упоминали. – iRuth