2012-05-23 3 views
8

Im Versuch, eine Komponente zu erreichen, um benutzerdefinierte Schatten auf Schaltflächen oder andere Komponenten zu erstellen, weiß ich, dass es mit einem 9patch oder einem png mit dem Schatten einfacher ist, aber ich möchte es ändern und Größe programmgesteuert auch in seinen Zuständen (gedrückt, usw.), so entschied ich mich, mit 9 Bildern zu versuchen, alle in XML, so dass die Schattenschattierungen ihren Gradienten von der Seite der Komponente beginnen.Radialer Farbverlauf in XML mit übergeordneter Größe

<!-- Left Shadow layer --> 
<item> 
    <shape android:shape="rectangle" > 
     <gradient 
      android:angle="0" 
      android:endColor="#FFFF0000" 
      android:startColor="#00FF0000" /> 
    </shape> 
</item> 

Es sieht gut aus, ist das Problem an den Ecken und mit dem Android: gradientRadius Parametern nun seinen Satz auf eine feste Größe, sondern in der Kontexthilfe wird gesagt, dass in einem Prozentsatz der Basisgröße eingestellt werden kann 10% oder Elterngröße 10% p, was ich möchte, dass er einen 100% p Radius einstellt, so dass der Gradient immer von der Hauptfarbe verschwindet und in der Kante des Quadrats verschwindet.

- EDIT -.

Das Android doc über gradientRadius gradientRadius

<shape android:shape="rectangle" > 
     <gradient 
      android:endColor="#00FF0000" 
      android:startColor="#FFFF0000" 
      android:gradientRadius="18" 
      android:centerX="100%" 
      android:centerY="100%" 
      android:type="radial" /> 
    </shape> 

Und das ist, wo im jetzt :(ich weiß nicht, wie kann ich diese Größe eingestellt seine übergeordneten Ansicht passen

Jede Hilfe wird geschätzt, wenn ich mit der Komponente fertig bin, werde ich den Code in eine Antwort einfügen :) so typische Tasten können anpassbare Schatten in Xml haben.

Ein Bild der verdienten Komponente.

--Edit--

Im in dieser immer noch interessiert :) niemand eine Ahnung hat?

Button with radia gradients

+0

ist dieses Bild, was Sie wollen oder was Sie bisher haben? – Leaudro

+0

hi @Leaudro, das ist, was ich will, kann ich es durch Einstellungen seiner Breite und Höhe manuell machen, so dass der Gradient passt die nicht radiale Steigung. Ich kann die radialen Gradienten für die Ecken nicht machen, so dass diese Form wiederverwendet werden kann, um Schatten für generische Komponenten zu erzeugen. – Goofyahead

Antwort

2

Ich glaube, Sie mit xml aufgeben sollten und ziehbar in Code umzusetzen. Wenn Sie die Drawable-Klasse erweitern, können Sie mit getBounds() eine Größe als Rechteck erhalten. Außerdem können Sie die onBoundsChange-Methode dynamisch neu berechnen. Sie können auch leicht Gradienten erstellen und sie in Paint-Objekt verwenden (setShader-Methode)

+1

hey es ist, bis jemand dies liest!, Ja, ich denke auch, aber seine Art von Anyaing :) – Goofyahead