Почему перемещение этого макета ограничения / нажатие на эту кнопку изменяет его уровень Z?Есть ли способ добавить точку останова при изменении значения z? - PullRequest
0 голосов
/ 02 февраля 2019

Редактировать: я добавил второй вопрос к названию, потому что я тоже пытаюсь это выяснить, но не могу определить точки наблюдения

Я работаю над окном выбора для моей игры.Ниже приведен ряд элементов, поэтому каждой группе видов я присваиваю свой 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

Я удалил не относящиеся к делу части класса, поэтому возможно, если есть какие-либо вопросы, пожалуйста, дайте мне знать

...