Редактировать: я добавил второй вопрос к названию, потому что я тоже пытаюсь это выяснить, но не могу определить точки наблюдения
Я работаю над окном выбора для моей игры.Ниже приведен ряд элементов, поэтому каждой группе видов я присваиваю свой Z-уровень.Для этого "custommenu" уровень составляет 10Х, и у меня было несколько изображений рядом друг с другом.Поскольку я немного новичок в этом, лучший способ показать и скрыть эти изображения - это поместить их все в макет ограничения и переместить этот макет на экран и с экрана с помощью .setX ().
Позже я понял, что мне нужно, чтобы они использовали некоторые методы, уникальные для кнопок, поэтому я изменил ту же переменную, что и массив кнопок, вместо массива изображений.Затем эти кнопки проходили через те же строки кода, что и изображение, за исключением того, что перемещение их на экране изменяет их уровень Z на 7 (в соответствии с logcat).Если бы кто-то мог указать, что мне не хватает, это было бы замечательно.
Я попытался просто проигнорировать это и установить уровень Z на то, что должно быть каждый раз, когда я .setX (), но нажатие кнопок отменяетОт уровня Z до 7,0, скрывая их еще раз.
public class CustomMenu {
//Initialize variables
//Activity
private Activity bsactivity;
//Constraint Layout
private ConstraintLayout customlayout;
// private ImageView[] shardoptionsiview; Commented out and same name used
public Button[] shardoptionsiview;
//Classes
public GenericSoulShard[] shufshardlist;
private GenericSoulShard[] shardoptions;
//Points
private Point screensize;
private Point bspnlsize;
//Position
private Point[] menulenspos;
private Point[] selectedlenspos;
//Iview sizes
private Point lensiconsize;
//integers
private int shardnum;
//Constructor
public CustomMenu(Activity bsactivityin,
ConstraintLayout bslayoutin, ConstraintLayout btlbtnlayoutin,
//BSMainCharacter bsmcin, BSGenericEnemy[] bsenemylistin,
TestMainFolder1 folderin,
Point screensizein,Point bspnlsizein){
//convert inputs to classwide variables
//Activities
bsactivity = bsactivityin;
//ConstraintLayouts
bslayout=bslayoutin;
//new Constraint layouts
customlayout=new ConstraintLayout(bsactivity);
bslayout.addView(customlayout);
customlayout.setX(0);
customlayout.setY(0);
customlayout.setZ(100);
// shardoptionsiview=new ImageView[10];
shardoptionsiview=new Button[10];
shardoptionsfilterview=new TextView[10];
for (int i=0;i<10;i++){
//shardoptionsiview[i]=new ImageView(bsactivity);
shardoptionsiview[i]=new Button(bsactivity);
customlayout.addView(shardoptionsiview[i]);
// shardoptionsiview[i].setText(null);
shardoptionsiview[i].setX(menulenspos[i].x);
shardoptionsiview[i].setY(menulenspos[i].y);
shardoptionsiview[i].setZ(101);
shardoptionsiview[i].setBackground(ContextCompat.getDrawable(bsactivity,R.drawable.bssyncbutton));
}
shardoptions=new GenericSoulShard[10];
shufshardlist =folder1.getShardlist();
shardqueue=new LinkedList<>(Arrays.asList(shufshardlist));
customlayout.setX(-customlayout.getLayoutParams().width);
selectlayout.setX(screensize.x);
for(int i=0;i<10;i++){
if(customlayout.indexOfChild(shardoptionsiview[i])==-1) Log.e("buttoncheck", String.valueOf(i));
else Log.e("buttoncheck","oncreate"+String.valueOf(i)+" x:"+String.valueOf(shardoptionsiview[i].getX())+" y:"+String.valueOf(shardoptionsiview[i].getY())+" z:"+String.valueOf(shardoptionsiview[i].getZ()));
}
}
public void hideCustomMenu(){
customlayout.setX(-customlayout.getLayoutParams().width);
for(int i=0;i<10;i++){
if(customlayout.indexOfChild(shardoptionsiview[i])==-1) Log.e("buttoncheck", String.valueOf(i));
else Log.e("buttoncheck","afterhide"+String.valueOf(i)+" x:"+String.valueOf(shardoptionsiview[i].getX())+" y:"+String.valueOf(shardoptionsiview[i].getY())+" z:"+String.valueOf(shardoptionsiview[i].getZ()));
}
}
public void showCustomMenu(){
customlayout.setX(0);
for(int i=0;i<10;i++){
// shardoptionsiview[i].setZ(101); Test hardcode
if(customlayout.indexOfChild(shardoptionsiview[i])==-1) Log.e("buttoncheck", String.valueOf(i));
else Log.e("buttoncheck","onshow"+String.valueOf(i)+" x:"+String.valueOf(shardoptionsiview[i].getX())+" y:"+String.valueOf(shardoptionsiview[i].getY())+" z:"+String.valueOf(shardoptionsiview[i].getZ()));
}
}
}
Без отметок времени исключения для i = 0:
"oncreate0 x:11.0 y:711.0 z:101.0" Correct Z value
"onshow0 x:11.0 y:711.0 z:7.0" Incorrect
"afterhide0 x:11.0 y:711.0 z:7.0" Incorrect
Если я раскомментирую .setZ (101) в методе showони
"oncreate0 x:11.0 y:711.0 z:101.0" Correct
"onshow0 x:11.0 y:711.0 z:101.0" Now this is correct, but if I click on the button before running the hide button it disappears and returns
"afterhide0 x:11.0 y:711.0 z:7.0" Clicking the button changes the Z value
Я удалил не относящиеся к делу части класса, поэтому возможно, если есть какие-либо вопросы, пожалуйста, дайте мне знать