Android: элементы пользовательского интерфейса поверх холста - PullRequest
4 голосов
/ 24 января 2011

Как мне установить некоторые элементы пользовательского интерфейса поверх (поверх) холста?

У меня есть простая сенсорная игра, графика которой размещена в пользовательском представлении с помощью canvas. Однако, поскольку моя полноэкранная панель находится в setContentView (), я не могу добавлять элементы пользовательского интерфейса, такие как progressBar или логотип. Мне бы хотелось, чтобы весь слой холста был виден с некоторыми объектами (progressBar, логотип), "плавающими" над ним.

Основной класс:

public class GameClass extends Activity implements OnGestureListener {

Panel panel;

public void onCreate(Bundle savedInstance) {
  super.onCreate(savedInstance);

  panel = new Panel(this, 1, 2);
  setContentView(Panel);
  ...
}

Класс панели:

public class Panel extends View {   

  public Panel(Context context, int Var1, int Var2) {
    super(context);
    ...
  }

  @Override
  protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    ...
  }
}

Как показывает код, касания обрабатываются внутри GameClass, а изменения анимации обрабатываются внутри Panel.

Или, может быть ... Возможно ли начать новую прозрачную операцию с индикатором выполнения и кнопкой, чтобы и кнопка наложенной операции, и объекты на основной деятельности? И мне может понадобиться способ закрыть все слои (прозрачная активность, Panel, GameClass) с помощью кнопки прозрачной активности. Сложно? : D

1 Ответ

3 голосов
/ 24 января 2011

У меня есть та же проблема, и вот как я решил ее

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.game);

    drawView = new DrawView(this);
    drawView.requestFocus();
    LinearLayout upper = (LinearLayout) findViewById(R.id.LinearLayout01);
    upper.addView(drawView);
    ImageButton menu = (ImageButton) findViewById(R.id.ImageButton01);
    menu.setOnClickListener(new OnClickListener()
    {           
        @Override
        public void onClick(View v)
        {
            finish();
        }
    });
    ImageButton reset = (ImageButton) findViewById(R.id.ImageButton02);
    reset.setOnClickListener(new OnClickListener()
    {           
        @Override
        public void onClick(View v)
        {
            drawView.resetGame();
        }
    });
}

вместо установки contentview на панель, добавив его Linearlayout, который добавлен в мой game.xml, и вот мой

game.xml

<?xml version="1.0" encoding="utf-8"?><RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:background="@drawable/game_background">
<LinearLayout
    android:id="@+id/LinearLayout01"
    android:layout_width="fill_parent"
    android:layout_height="350dip" />
<LinearLayout
    android:id="@+id/LinearLayout02"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/LinearLayout01">
    <ImageButton
        android:id="@+id/ImageButton01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:background="@drawable/menu"></ImageButton>
    <ImageButton
        android:id="@+id/ImageButton02"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:background="@drawable/reset"></ImageButton>
</LinearLayout>
<LinearLayout
    android:layout_below="@+id/LinearLayout01"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:id="@+id/layout_ad"
    android:layout_height="wrap_content" />

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...