Экран загрузки без XML — android studio

#java #android #android-layout

#java #Android #android-макет

Вопрос:

Итак, я создаю игру в Android Studio, и вместо android-layout этого я использую Java class в качестве движка и contentView .

  spaceInvadersEngine = new SpaceInvadersEngine(this, size.x, size.y);
    setContentView(spaceInvadersEngine);
 

Теперь, когда я загружаю новый уровень, мне нужно, чтобы что-то выскочило и сделало экран недоступным, пока уровень не загрузит все данные. (В моей голове у меня есть что-то вроде баннера, который будет находиться в центре экрана).
Но у меня нет XML file for spaceInvadersEngine , поэтому я не могу указать, например ImageView , который будет виден во время загрузки данных.

Есть идеи, как это сделать?

Ответ №1:

  • Создайте imageView программно и задайте свойство видимости gone , например : yourImageView.setVisibility(View.GONE);

пример :

            // Initialize a new ImageView widget
            ImageView iv = new ImageView(getApplicationContext());

            // Set an image for ImageView
            iv.setImageDrawable(getDrawable(R.drawable.animal));


            // set visibility to gone
            iv.setVisibility(View.GONE);

            // Finally, add the ImageView to your layout layout
            yourLayout.addView(iv);
 
  • нужно что-то, чтобы выскочить и сделать экран недоступным, пока level не загрузит все данные, вы можете использовать класс AsynTask, сначала у него есть 3 метода doInBackground , которые вы можете использовать для загрузки всех данных. После загрузки всех данных он передаст возвращаемое значение другому методу с именем ‘onPostExecute’, который вы можете использовать, чтобы снова скрыть ImageView после того, как вы покажете его в методе PreExecute

Пример :

  public class LoadImageViewWhileLoadData extends AsyncTask<Boolean,String,Boolean> {
    @Override
    protected void onPreExecute() {
        // show your imageView
        yourImageView.setVisibility = View.VISIBLE;
        super.onPreExecute();
    }
    
    @Override
    protected Boolean doInBackground(Boolean... booleans) {
        // your code that loads all data
        // must return value that pass to onPostExecute
        return null;
    }
    
    @Override
    protected void onProgressUpdate(String... values) {
        // you can use this method if you use progres bar instead of imageview
        super.onProgressUpdate(values);
    }

    @Override
    protected void onPostExecute(Boolean aBoolean) {

        // make it gone again.
        yourImageView.setVisibility = View.GONE;
        super.onPostExecute(aBoolean);
    }
}
 

Комментарии:

1. AsyncTask устарел , поэтому лучше не поощрять его дальнейшее использование.

2. У меня нет макетов. У меня есть два потока, и в одном у меня есть метод draw, в котором я рисую все растровые изображения