4 Stimmen

Android: UI-Elemente über der Canvas-Ebene

Wie setze ich einige UI-Elemente über (auf) die Leinwand?

Ich habe ein einfaches Touch-Spiel, das seine Grafiken auf benutzerdefinierte Ansicht mit Leinwand platziert hat. Da mein Vollbild-Panel jedoch in der setContentView() ist, kann ich keine UI-Elemente wie progressBar oder Logo hinzufügen. Ich möchte ganze Canvas-Ebene sichtbar mit einigen Objekten (progressBar, Logo) "schwebend" über sie haben.

Hauptklasse:

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);
  ...
}

Panel-Klasse:

public class Panel extends View {   

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

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

Wie der Code zeigt, werden Berührungen innerhalb der GameClass und die Änderungen in der Animation innerhalb des Panels gehandhabt.

Oder vielleicht Wäre es möglich, eine neue transparente Aktivität mit Fortschrittsbalken und Schaltfläche zu starten, so dass sowohl die Schaltfläche auf der Overlay-Aktivität UND die Objekte auf der darunter liegenden Aktivität? Und ich könnte einen Weg brauchen, um alle Ebenen (transparente Aktivität, Panel, GameClass) mit der Schaltfläche auf der transparenten Aktivität zu schließen. Kompliziert? :D

3voto

ingsaurabh Punkte 15180

Ich habe das gleiche Problem, und ich habe es folgendermaßen gelöst

@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();
        }
    });
}

anstelle der Einstellung contentview zu Panel Hinzufügen es Linearlayout, die in meinem game.xml hinzugefügt wird und hier geht meine

Spiel.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" />

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X