Update ControlDirection.java
This commit is contained in:
parent
c69661df03
commit
5d37cc7ca6
|
@ -51,11 +51,11 @@ import java.util.UUID;
|
|||
@SuppressLint("ViewConstructor")
|
||||
public class ControlDirection extends RelativeLayout implements CustomView {
|
||||
|
||||
private final InvalidationListener notifyListener;
|
||||
private final InvalidationListener dataChangeListener;
|
||||
private final InvalidationListener boundaryListener;
|
||||
private final InvalidationListener visibilityListener;
|
||||
private final InvalidationListener alphaListener;
|
||||
private InvalidationListener notifyListener;
|
||||
private InvalidationListener dataChangeListener;
|
||||
private InvalidationListener boundaryListener;
|
||||
private InvalidationListener visibilityListener;
|
||||
private InvalidationListener alphaListener;
|
||||
|
||||
@Nullable
|
||||
private final GameMenu menu;
|
||||
|
@ -195,6 +195,9 @@ public class ControlDirection extends RelativeLayout implements CustomView {
|
|||
alphaListener = null;
|
||||
|
||||
post(() -> {
|
||||
if (notifyListener == null || dataChangeListener == null || boundaryListener == null || visibilityListener == null) {
|
||||
return;
|
||||
}
|
||||
notifyData();
|
||||
dataProperty.addListener(dataChangeListener);
|
||||
getData().addListener(notifyListener);
|
||||
|
@ -202,6 +205,9 @@ public class ControlDirection extends RelativeLayout implements CustomView {
|
|||
}
|
||||
|
||||
private void notifyData() {
|
||||
if (visibilityListener == null) {
|
||||
return;
|
||||
}
|
||||
ControlDirectionData data = getData();
|
||||
|
||||
refreshBaseInfo(data);
|
||||
|
@ -624,19 +630,15 @@ public class ControlDirection extends RelativeLayout implements CustomView {
|
|||
final int autoFitDist = ConvertUtils.dip2px(getContext(), 5);
|
||||
int dist = ConvertUtils.dip2px(getContext(), menu.getMenuSetting().getAutoFitDist());
|
||||
|
||||
boolean xPref = false;
|
||||
boolean yPref = false;
|
||||
int prefX = 0;
|
||||
int prefY = 0;
|
||||
int selfX = 0;
|
||||
int selfY = 0;
|
||||
int xDist = autoFitDist;
|
||||
int yDist = autoFitDist;
|
||||
|
||||
boolean[] xyPref = {false, false};
|
||||
int[] prefXY = {0, 0};
|
||||
int[] selfXY = {0, 0};
|
||||
int[] xyDist = {autoFitDist, autoFitDist};
|
||||
int left = (int) getX();
|
||||
int right = (int) (getX() + getWidth());
|
||||
int up = (int) getY();
|
||||
int down = (int) (getY() + getHeight());
|
||||
int[] posArr = {left, right, up, down};
|
||||
|
||||
for (int i = 0; i < viewGroup.getChildCount(); i++) {
|
||||
if (viewGroup.getChildAt(i).getVisibility() == VISIBLE) {
|
||||
|
@ -644,71 +646,49 @@ public class ControlDirection extends RelativeLayout implements CustomView {
|
|||
if (button == this || (!(button instanceof ControlButton) && !(button instanceof ControlDirection))) {
|
||||
continue;
|
||||
}
|
||||
int buttonLeft = (int) button.getX();
|
||||
int buttonRight = (int) (button.getX() + button.getWidth());
|
||||
int buttonUp = (int) button.getY();
|
||||
int buttonDown = (int) (button.getY() + button.getHeight());
|
||||
|
||||
if (Math.abs(left - buttonLeft) < xDist) {
|
||||
xPref = true;
|
||||
prefX = buttonLeft;
|
||||
xDist = left - buttonLeft;
|
||||
selfX = left - xDist;
|
||||
}
|
||||
if (left - buttonRight >= 0 && left - buttonRight < xDist) {
|
||||
xPref = true;
|
||||
prefX = buttonRight;
|
||||
xDist = left - buttonRight - dist;
|
||||
selfX = left - xDist;
|
||||
}
|
||||
if (Math.abs(right - buttonRight) < xDist) {
|
||||
xPref = true;
|
||||
prefX = buttonRight;
|
||||
xDist = right - buttonRight;
|
||||
selfX = right - xDist;
|
||||
}
|
||||
if (buttonLeft - right >= 0 && buttonLeft - right < xDist) {
|
||||
xPref = true;
|
||||
prefX = buttonLeft;
|
||||
xDist = right - buttonLeft + dist;
|
||||
selfX = right - xDist;
|
||||
}
|
||||
if (Math.abs(up - buttonUp) < yDist) {
|
||||
yPref = true;
|
||||
prefY = buttonUp;
|
||||
yDist = up - buttonUp;
|
||||
selfY = up - yDist;
|
||||
}
|
||||
if (up - buttonDown >= 0 && up - buttonDown < yDist) {
|
||||
yPref = true;
|
||||
prefY = buttonDown;
|
||||
yDist = up - buttonDown - dist;
|
||||
selfY = up - yDist;
|
||||
}
|
||||
if (Math.abs(down - buttonDown) < yDist) {
|
||||
yPref = true;
|
||||
prefY = buttonDown;
|
||||
yDist = down - buttonDown;
|
||||
selfY = down - yDist;
|
||||
}
|
||||
if (buttonUp - down >= 0 && buttonUp - down < yDist) {
|
||||
yPref = true;
|
||||
prefY = buttonUp;
|
||||
yDist = down - buttonUp + dist;
|
||||
selfY = down - yDist;
|
||||
//buttonLeft, buttonRight, buttonUp, buttonDown
|
||||
int[] buttonPosArr = {
|
||||
(int) button.getX(),
|
||||
(int) (button.getX() + button.getWidth()),
|
||||
(int) button.getY(),
|
||||
(int) (button.getY() + button.getHeight())
|
||||
};
|
||||
/*
|
||||
left - buttonLeft, left - buttonRight
|
||||
right - buttonRight, right - buttonLeft
|
||||
up - buttonUp, up - buttonDown
|
||||
down - buttonDown, down - buttonUp
|
||||
*/
|
||||
int flag = -1;
|
||||
for (int j = 0; j < posArr.length; j++) {
|
||||
flag *= -1;
|
||||
int xyIndex = j / 2 % 2;
|
||||
if (Math.abs(posArr[j] - buttonPosArr[j]) < xyDist[xyIndex]) {
|
||||
xyPref[xyIndex] = true;
|
||||
prefXY[xyIndex] = buttonPosArr[j];
|
||||
xyDist[xyIndex] = posArr[j] - buttonPosArr[j];
|
||||
selfXY[xyIndex] = posArr[j] - xyDist[xyIndex];
|
||||
}
|
||||
int buttonDist = posArr[j] - buttonPosArr[j + flag];
|
||||
if (flag * buttonDist >= 0 && flag * buttonDist < xyDist[xyIndex]) {
|
||||
xyPref[xyIndex] = true;
|
||||
prefXY[xyIndex] = buttonPosArr[j + flag];
|
||||
xyDist[xyIndex] = buttonDist - flag * dist;
|
||||
selfXY[xyIndex] = posArr[j] - xyDist[xyIndex];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (xPref) {
|
||||
setX(left - xDist);
|
||||
showLine(0, prefX, selfX);
|
||||
if (xyPref[0]) {
|
||||
setX(left - xyDist[0]);
|
||||
showLine(0, prefXY[0], selfXY[0]);
|
||||
} else {
|
||||
removeLine(0);
|
||||
}
|
||||
if (yPref) {
|
||||
setY(up - yDist);
|
||||
showLine(1, prefY, selfY);
|
||||
if (xyPref[1]) {
|
||||
setY(up - xyDist[1]);
|
||||
showLine(1, prefXY[1], selfXY[1]);
|
||||
} else {
|
||||
removeLine(1);
|
||||
}
|
||||
|
@ -960,5 +940,10 @@ public class ControlDirection extends RelativeLayout implements CustomView {
|
|||
}
|
||||
dataProperty.removeListener(dataChangeListener);
|
||||
getData().removeListener(notifyListener);
|
||||
notifyListener = null;
|
||||
dataChangeListener = null;
|
||||
boundaryListener = null;
|
||||
visibilityListener = null;
|
||||
alphaListener = null;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue