2014-06-10 11 views
7

Ich versuche, die folgende einfache Form in Android XML zu erstellen:Es ist möglich, diese einfache Form in Android XML zu erstellen?

Simple Shape

Nur ein Rechteck mit einem Dreieck kombiniert einen Pfeil zu bilden. Die Form sollte als Navigationsschaltflächenhintergrund verwendet werden.

Auf Windows Phone wäre es kein Problem, diese Form in XAML zu erstellen, aber die XML-Zeichenfunktionen von Android scheinen sehr viel begrenzter zu sein.

Ich habe versucht, eine Layer-Liste mit einem normalen Rechteck als "Körper" und gedrehten Rechteck als Dreieck zu zeichnen. Das Erstellen eines Dreiecks durch Drehen eines Rechtecks ​​funktioniert gut, solange das Dreieck an der Grenze ausgerichtet ist. Sobald ich versuche, das Dreieck nach links zu verschieben (bis zum Ende des Körpers/Kastens), ist das Dreieck kein Dreieck mehr, sondern nur ein gedrehtes Rechteck ... Gibt es eine Möglichkeit, das Dreieck abzuschneiden? eine Hälfte des gedrehten Rechtecks ​​und verschiebe es an das Ende der Box in XML?

Natürlich kann dies in Code/Java gemacht werden, aber ich würde gerne wissen, ob es auch XML möglich ist.

Ich würde diese Art von Button in vielen verschiedenen Größen benötigen und mit einem XML-Drawable wäre viel besser (aus meiner Sicht) als mit Dutzenden von PNGs.

+0

u mit layerlist versucht haben, die haben ein Rechteck und ein Quadrat gedreht (rechte Seite des Rechtecks).? –

+2

Durch xml können Sie es nicht machen, verwenden Sie Bild oder Knopf für das selbe und stellen Sie dieses als Hintergrundbild zum Knopf ein oder setzen Sie src zu imageview. –

+2

Erstellen Sie ein Neun-Patch-Bild mit gestreckten Bereichen. – hardartcore

Antwort

3

versuchen, diese individuelle Form:

Shape shape = new Shape() { 
    Path path = new Path(); 
    @Override 
    protected void onResize(float width, float height) { 
     path.reset(); 
     path.lineTo(width - height/2, 0); 
     path.lineTo(width, height/2); 
     path.lineTo(width - height/2, height); 
     path.lineTo(0, height); 
     path.close(); 
    } 
    @Override 
    public void draw(Canvas canvas, Paint paint) { 
     canvas.drawPath(path, paint); 
    } 
}; 
ShapeDrawable d = new ShapeDrawable(shape); 
d.getPaint().setColor(0xff6699bb); 

someView.setBackgroundDrawable(d); 
+0

Vielen Dank für das Beispiel, aber wie gesagt, ich suchte nach einer Lösung, die nur XML verwendet ... –

+1

wie ich sagte, Sie können das nicht in XML, warum muss es XML sein? irgendein Grund? – pskink

+0

Ich habe gerade an einer Windows Phone App gearbeitet und solche Dinge in XAML zu erstellen ist sehr einfach und unkompliziert. Ich wollte nur wissen, ob dies auch in Android XML möglich ist. Natürlich kann es im Code gemacht werden, aber das ist ziemlich umständlich, denke ich. –

0

Ich kann nicht kommentieren, so wird die Antwort .. Ich mag die Layerlist-Idee. hier Beispiel:

Android custom shape

und triange Beispiel hier: http://looksok.wordpress.com/2013/08/24/android-triangle-arrow-defined-as-an-xml-shape/

diese Antworten Kombination arbeiten können.

+0

Während dieser Link eine Antwort liefern kann, stellen Sie besser einige Auszüge von dieser Seite bereit, da ihr Inhalt in der Zukunft möglicherweise nicht mehr verfügbar ist. –