Zwei Views übereinanderlegen

Ich möchte einen GLSurfaceView unter einen normalen View legen, sodass die graphischen Elemente beider Views Angezeigt werden.Ich mache dies mithilfe von ViewGroup, doch es wird immer nur weißer Bildschirm angezeigt.

package de.zombiepriester.kub;

import java.util.ArrayList;

import android.content.Context;
import android.view.ViewGroup;
import android.view.View;

public class ContainerView extends ViewGroup{
	
	public ContainerView(Context context, ArrayList<View> children) {
		super(context);
		for(int i = 0; i < children.size(); i++){
			addView(children.get(i));
		}
		
	}

   @Override 
	protected void onLayout(boolean changed, int l, int t, int r, int b) {
		
	}

}

Activity-> onCreate

view = new GLSurfaceView(this);
controlView = new ControlView(this);
view.setRenderer(this);
viewList = new ArrayList<View>();
viewList.add(view);
viewList.add(controlView);
view.setOnTouchListener(this);
ViewGroup container = new ContainerView(this, viewList);
setContentView(container);

Was mach ich falsch?
*Titel: übereinanderlegen

Ich habs jetzt mal anders gemacht:
Der "controlView soll über dem “view” so liegen, dass man die Bilder sieht, die ich im “controlView” zeichne und man trotzdem die Models sieht die im “view” gezeichnet werden

public void onCreate(Bundle state){
		super.onCreate(state);
		view = new GLSurfaceView(this);
		controlView = new ControlView(this);
		view.setRenderer(this);
		frame = new FrameLayout(this);
		frame.addView(view);
		frame.addView(controlView);
		setContentView(frame);
	}

Aber man sieht nur das vom “controlView” gezeichnete zeug und nicht den 3D-Würfel der sich auf dem “view” dreht.
Auch das setzen von controlView.setBackgroundColor(Color.Transparent);
und controlView.setAlpha(<irgendwas unter 0.5>) hilft nix.

Ich hab zwar noch nie irgendetwas mit android gemacht, aber vielleicht hilft dir das ja weiter:


Anscheinend gibt es irgendetwas mit setAlpha

setAlpha geht nicht, denn das Gerät, auf dem ich das ganze per USB-Debugging teste ist Android 2.3.3(Updates nicht mehr unterstützt), und setAlpha ist erst bei Android 3.0 dabei

Dafuk… Android 2.3? Ist das nicht etwa… alt…?

Aber ich glaube dann wirds schwierig. wenigstens
finde ich gerade nichts.
Was ist mit als Hintergrund ne ColorView oder so zu machen, und da einfach ne transparente Farbe drauf?

Was ist ein ColorView(elipse findet keinen/kann nicht importiert werden)?

Hier, auch von Stackoverflow:

View.setBackgroundDrawable. Use a ColorDrawable with the appropriate alpha value?

Sorry, heißt wohl ColorDrawable und nicht View

*** Edit ***

OT: So langsam lerne ich Android ohne je was damit gemacht zu haben xD

So ist es jetzt(mit API-Test, weil setBackgroundDrawable deprecated und setBackground(Drawable d) zu neu ist):

cc = new ColorDrawable();
		cc.setAlpha(0);
		if(Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN){
			setBackgroundDrawable(cc);
		}else{
			setBackground(cc);
		}

Trotzdem sieht man den Würfel nicht

okay, also wird bei dir das erste if ausgeführt?

mach mal eine farbe rein, zB rot, und dann transparenz 100 -
bzw irgendwas in der mitte (sind da die werte von 0 bis 1 oder bis 255?)
ist die farbe dann irgendwie “dunkler” als wenn du transparenz voll machst? oder
funktioniert es gar nicht, also keine farbe?
Was ist wenn du die überliegende View wegmachst? Funktioniert der würfel überhaupt?

So:
cc = new ColorDrawable(Color.RED);
mit oder ohne setAlpha ists immernoch schwarz
und wenn ich den “controlView” nicht zum “frame” hinzufüge, sehe ich den Würfel
des “views”

Okay. Entferne mal die wuerfel view.
Siehst du dann einen hintergrund? Bekommst du
Ueberhaupt irgendwie diese zweite view dazu, etwas anderes als schwarz zu zeigen? Nen button oder so? Vllt liegt da ja schon irgendwo der fehler

Der hintergrund bleibt immernoch schwarz:

cc = new ColorDrawable(Color.RED);
if(Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN){
	setBackgroundDrawable(cc);
}else{
	setBackground(cc);
}
frame = new FrameLayout(this);
//frame.addView(view);
frame.addView(controlView);
setContentView(frame);

wie gesagt, pack mal irgendetwas drauf.
Einen Button. Oder einen Text. Irgendwas wovon du weißt das es funktionieren muss.

*** Edit ***

Wie siehts mit anderen Drawables aus?
Gibt es vielleicht sichtbarkeits parameter oder so, irgendetwas
mit setVisibility?

Ein Blick in die API verrät noch ViewGroup.setBackgroundColor, funktioniert das vielleicht wenigstens?

Optional wäre es vielliecht hilfreich, wenn sich hier jemand meldet, der schon mal etwas mit android gemacht hat…

*** Edit ***

zum beispiel so jemand wie @schlingel

Zwei Views übereinander legen funktioniert am einfachsten mit einem RelativeLayout. Du kannst dort beide übereinander positionieren und mit dem jeweiligen LayoutMargin der ChildViews steuern wo genau sich diese befinden.

Dann musst du überhaupt nicht mit Background herumspielen. Das funktioniert Out of the Box.

Und wie kann ich so ein RelativeLayout für so einen Zweck verwenden?

Ich bin ja nicht der richtige fuer diese worte, aber es klingt hier nach mangel an basics :stuck_out_tongue:

Schau mal hier: http://forum.byte-welt.net/threads/12836-Ausziehbarer-view-Android?p=101665&viewfull=1#post101665
Es geht dort zwar um einen nachgebauten Slider, aber dort in der XML siehst du, wie man 2 Views übereinander legen kann.

Irgenwie krieg ich es nicht hin das, was da in XML dasteht so in java umzusetzen.

Etwas genauer bitte. „Irgendwie krieg ich es nicht hin“ ist keine Fehlerbeschreibung :wink:

Wenn da Beispielsweise seteht :
android:layout_height=“wrap_content”
wie krieg ich das hin, dass dieser View dieses “Attribut” hat ?