Ich versuche, einen Farbverlauf zu erstellen, der von der Mitte des Bildschirms in Weiß ausgeht und zu Schwarz wird, wenn er sich zu den Rändern des Bildschirms bewegt.
Da ich einen “normalen” Farbverlauf wie diesen mache, habe ich mit verschiedenen Formen experimentiert:
Es hat nicht nur funktioniert, es löste auch den Welthunger! Vielen Dank!
– pgsandstrom
19. März 2010 um 10:30 Uhr
Randnotiz: Es ist auch möglich, das Transparenz-Byte in der Farbe zu verwenden. #ff00ff00 bis #7f0000ff verblassen von vollständig undurchsichtigem Rot zu halbtransparentem Blau.
– Simon Forsberg
7. Januar 2013 um 17:36 Uhr
android:gradientRadius=”250″ wird ignoriert. Sie sollten auf eine Dimen-Ressource mit einem px- oder dp-Wert verweisen, wie: android:gradientRadius=”@dimen/gradient_radius”
– Bolling
3. März 2015 um 21:20 Uhr
Danke Bolling, du hast Recht, dass der Android:gradientRadius=”250″ überhaupt nicht funktioniert, ich denke, er hat sich bei älteren Android-Versionen anders verhalten.
– Justin
22. April 2015 um 14:58 Uhr
Suragch
Ich finde Bilder immer hilfreich, wenn ich ein neues Konzept lerne, daher ist dies eine ergänzende Antwort.
Das %p bedeutet einen Prozentsatz des übergeordneten Elements, d. h. einen Prozentsatz der engsten Dimension der Ansicht, auf die wir unser Drawable setzen. Die obigen Bilder wurden durch Änderung der generiert gradientRadius in diesem Code
wobei die Dezimalstellen Brüche der Breite und Höhe sind x und y beziehungsweise.
Dokumentation
Hier sind einige Notizen von Dokumentation etwas mehr erklären.
android:gradientRadius
Radius des Farbverlaufs, wird nur bei radialem Farbverlauf verwendet. Kann eine explizite Abmessung oder ein Bruchwert relativ zur Mindestabmessung der Form sein.
Kann ein Gleitkommawert sein, z. B. “1,2”.
Kann ein Dimensionswert sein, bei dem es sich um eine Fließkommazahl mit angehängter Einheit wie “14,5 sp” handelt. Verfügbare Einheiten sind: px (Pixel), dp (dichteunabhängige Pixel), sp (skalierte Pixel basierend auf der bevorzugten Schriftgröße), in (Zoll) und mm (Millimeter).
Kann ein Bruchwert sein, bei dem es sich um eine Fließkommazahl handelt, an die entweder % oder %p angehängt wird, z. B. “14,5 %”. Das %-Suffix bedeutet immer einen Prozentsatz der Basisgröße; Das optionale %p-Suffix stellt eine Größe relativ zu einem übergeordneten Container bereit.
im Kikat-Typ radial funktioniert, wenn Sie %p aus dem Gradientenradius entfernen. Für Kikat android:gradientRadius=”10″
– Mehmoodnisar125
1. Februar 2018 um 7:52 Uhr
In API 21 braucht man wirklich android:gradientRadius="10%p" (mit p) oder erhält eine Ausnahme. Sie können auch einstellen android:centerX="20%".
– CoolMind
10. Dezember 2020 um 18:46 Uhr
@CoolMind, würde es Ihnen etwas ausmachen, die Antwort zu bearbeiten und zu aktualisieren, um diese Änderungen widerzuspiegeln? Ich mache jetzt mehr mit Flutter, also habe ich meine Android-Antworten nicht auf dem neuesten Stand gehalten.
– Suragch
11. Dezember 2020 um 3:51 Uhr
@Suragch, danke für eine ausführliche Antwort! Ich wollte nur sagen, dass Sie gute Arbeit geleistet haben. Nicht jeder Autor kann alle diese Attribute hinzufügen und beschreiben, was sie bedeuten.
– CoolMind
11. Dezember 2020 um 11:01 Uhr
Sie können dies auch im Code tun, wenn Sie mehr Kontrolle benötigen, z. B. mehrere Farben und Positionierung. Hier ist mein Kotlin-Snippet zum Erstellen eines zeichenbaren radialen Farbverlaufs:
object ShaderUtils {
private class RadialShaderFactory(private val colors: IntArray, val positionX: Float,
val positionY: Float, val size: Float): ShapeDrawable.ShaderFactory() {
override fun resize(width: Int, height: Int): Shader {
return RadialGradient(
width * positionX,
height * positionY,
minOf(width, height) * size,
colors,
null,
Shader.TileMode.CLAMP)
}
}
fun radialGradientBackground(vararg colors: Int, positionX: Float = 0.5f, positionY: Float = 0.5f,
size: Float = 1.0f): PaintDrawable {
val radialGradientBackground = PaintDrawable()
radialGradientBackground.shape = RectShape()
radialGradientBackground.shaderFactory = RadialShaderFactory(colors, positionX, positionY, size)
return radialGradientBackground
}
}
Grundlegende Verwendung (kann aber mit zusätzlichen Parametern angepasst werden):
Hier ist das komplette XML mit Farbverlauf, Stoke und Kreisform.
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval" >
<!-- You can use gradient with below attributes-->
<gradient
android:angle="90"
android:centerColor="#555994"
android:endColor="#b5b6d2"
android:startColor="#555994"
android:type="linear" />
<!-- You can omit below tag if you don't need stroke -->
<stroke android:color="#3b91d7" android:width="5dp"/>
<!-- Set the same value for both width and height to get a circular shape -->
<size android:width="200dp" android:height="200dp"/>
<!--if you need only a single color filled shape-->
<solid android:color="#e42828"/>
</shape>