Eigene Ampel Klasse mit XML

F

Flocke123

Ambitioniertes Mitglied
4
Hallo Leute,

ich versuche mich aktuell an dem Thema XML.
Habe hierzu mit Microsoft Expression Design eine Ampel gezeichnet und in XAML umgewandelt.
Anschließend den Code in eine XML Datei in Eclipse kopiert. Soweit so gut. Die Canvas Objekte und deren Attribute werden richtig vom System erkannt.
Es ist ein Rechteck (Hintergrund) und 3 Ellipsen (Lampen).

Code:
<?xml version="1.0" encoding="utf-8"?>
<Canvas xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Name="Ampel" Width="800" Height="600" Clip="F1 M 0,0L 800,0L 800,600L 0,600L 0,0" UseLayoutRounding="False">
	<Canvas x:Name="Ebene_1" Width="800" Height="600" Canvas.Left="0" Canvas.Top="0">
		<Rectangle x:Name="Rectangle" Width="241" Height="361" Canvas.Left="279.5" Canvas.Top="39.4999" Stretch="Fill" StrokeLineJoin="Round" Stroke="#FF000000" Fill="#FF8C8C8C"/>
		<Ellipse 
		    x:Name="LampRed" 
		    Width="101" 
		    Height="101" 
		    Canvas.Left="349.5" 
		    Canvas.Top="59.5" 
		    Stretch="Fill" 
		    StrokeLineJoin="Round" 
		    Stroke="#FF000000" 
		    Fill="#FFFFFFFF"
		    />
		<Ellipse 
		    x:Name="LampYellow" 
		    Width="101" 
		    Height="101" 
		    Canvas.Left="349.5"
		    Canvas.Top="169.5" 
		    Stretch="Fill" 
		    StrokeLineJoin="Round" 
		    Stroke="#FF000000" 
		    Fill="#FFFFFFFF"
		    />
		<Ellipse 
		    x:Name="LampGreen" 
		    Width="101" 
		    Height="101" 
		    Canvas.Left="349.5" 
		    Canvas.Top="279.5" 
		    Stretch="Fill" 
		    StrokeLineJoin="Round" 
		    Stroke="#FF000000" 
		    Fill="#FFFFFFFF"
		    />
		<Rectangle x:Name="Rectangle_0" Width="39" Height="151" Canvas.Left="379.5" Canvas.Top="399.5" Stretch="Fill" StrokeLineJoin="Round" Stroke="#FF000000" Fill="#FF8C8C8C"/>
	</Canvas>
</Canvas>

Nächster Schritt wäre eine von "View" abgeleitete Klasse "Ampel" zu erstellen.
Diese Klasse hat einen Integerwert, der mir den Status der Ampel zeigt.
0 = Stop, 1 = Noch nicht und 2 = Los.
Je nach Status, sollen dann die verschiedenen Lampen in deren Farben leuchte, oder eben Grau/Weiß (was auch immer) sein.

Ich versteh nur nicht, wie ich die Ampel.XML mit der Ampel.Class in Verbindung bringen kann.
Funktioniert das irgendwie, wenn ich die onDraw() Methode überschreib? und wie kann ich dann aus dem Programm den Status des Ampel-Objektes verändern?

Eine andere Frage nebenbei, auch wenn sie vorgegriffen ist :thumbsup:
Kann ich dieses Ampel Objekt dann auch einfach in ein Layout ziehen? Also wie man es eben von Buttons, TextViews usw kennt.

Ein paar Tipps hierzu wären super.

Gruß Flocke

Der ursprüngliche Beitrag von 15:04 Uhr wurde um 15:39 Uhr ergänzt:

Okay, die Zusatzfrage hat sich geklärt.
Ich sehe ein Ampel Objekt schon in der Lasche Custom View & Layout.

Wenn ich es reinziehe bekomme ich den Fehler
Code:
java.lang.NullPointerException
    at android.graphics.Canvas_Delegate.native_drawBitmap(Canvas_Delegate.java:836)
    at android.graphics.Canvas.native_drawBitmap(Canvas.java:-1)
    at android.graphics.Canvas.drawBitmap(Canvas.java:1066)
    at com.example.ampel.Ampel.onDraw(Ampel.java:21)
    at android.view.View.draw(View.java:13712)
    at android.view.View.draw(View.java:13596)
    at android.view.ViewGroup.drawChild(ViewGroup.java:2928)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797)
    at android.view.View.draw(View.java:13594)
    at android.view.ViewGroup.drawChild(ViewGroup.java:2928)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797)
    at android.view.View.draw(View.java:13594)
    at android.view.ViewGroup.drawChild(ViewGroup.java:2928)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797)
    at android.view.View.draw(View.java:13715)
    at android.view.View.draw(View.java:13596)
    at android.view.ViewGroup.drawChild(ViewGroup.java:2928)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2797)
    at android.view.View.draw(View.java:13715)
Was mich nicht weiter verwundert.

Was ich aktuell versucht habe in der onDraw()
Code:
	protected void onDraw(Canvas canvas) {
		Bitmap b = BitmapFactory.decodeResource(getResources(), R.xml.ampel);
		canvas.drawBitmap(b, 0, 0, null);
		super.onDraw(canvas);
	}

Hoffe jemand weis da besser bescheid als ich ;)

Der ursprüngliche Beitrag von 15:39 Uhr wurde um 16:10 Uhr ergänzt:

Okay, sieht nicht so aus, als würde das so funktionieren, wie ich das gerne hätte.
Die XML Attribute stehen alle unter Unknown, hatte das überlesen.
Kann die XML-Datei auch nicht in ein Drawable umwandeln.
Sehr schade.

Gibt es denn Programme, mit denen man grafische Objekte zeichnen, und diese dann in einer "Android-Konformen" Technik importieren kann?
 
liegt vielleicht daran, dass xaml ein standard von microsoft ist und der unter android nicht verwendet wird.
 
Ich dachte auch nicht wirklich, dass das so klappen wird. Ich war nur überascht, als der XAML Code reibungslos kopiert werden konnte, und im Eclipse auch noch alle Objekte mit Attributen zu sehen waren.

Gibt es denn Möglichkeiten, Android XML Objekte (Kreise, Rechtecke usw) mit einem Programm grafisch zu erstellen und anschließend ins Eclipse zu kopieren?
 
Schau dir mal AndroidSVG an. SVG ist ein anderes XML-Basiertes Vektorzeichenformat, für das jene Bibliothek support liefert. Dann kannst du einen Canvas im Layout nehmen und dort das SVG hineinrendern.
 
Flocke123 schrieb:
Ich dachte auch nicht wirklich, dass das so klappen wird. Ich war nur überascht, als der XAML Code reibungslos kopiert werden konnte, und im Eclipse auch noch alle Objekte mit Attributen zu sehen waren.

Gibt es denn Möglichkeiten, Android XML Objekte (Kreise, Rechtecke usw) mit einem Programm grafisch zu erstellen und anschließend ins Eclipse zu kopieren?

naja die eclipse ansicht is ja nur ein xml editor und xaml ist ja nichts weiter als spezielles xml. die syntax wird ja eingehalten und die wird hervorgehoben.
 

Ähnliche Themen

FabianDev
Antworten
5
Aufrufe
555
swa00
swa00
R
Antworten
3
Aufrufe
1.618
Ritartet
R
F
  • Fischi84
Antworten
2
Aufrufe
1.916
Fischi84
F
Zurück
Oben Unten