#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, в котором я рисую все растровые изображения