chore: Dokumentation, SKILL.md und Drawables aktualisieren
This commit is contained in:
parent
95d8a10ed0
commit
4aba9f24a4
5 changed files with 202 additions and 33 deletions
19
.github/skills/android-build/SKILL.md
vendored
19
.github/skills/android-build/SKILL.md
vendored
|
|
@ -58,7 +58,20 @@ PowerShell konvertiert Binärdaten in UTF-16 und zerstört den PNG-Header.
|
|||
|
||||
### Direkter Gradle-Aufruf (Fallback)
|
||||
|
||||
Falls das Skript nicht verfügbar ist:
|
||||
Falls das Skript nicht verfügbar ist, gibt es **zwei verlässliche Varianten**:
|
||||
|
||||
#### Variante A – via `execution_subagent` (empfohlen)
|
||||
|
||||
```
|
||||
cd x:\krisenvorrat ; .\gradlew assembleDebug test
|
||||
```
|
||||
|
||||
- `.\gradlew` (ohne `.bat`) funktioniert hier einwandfrei
|
||||
- Kein `| Out-String` nötig – `execution_subagent` wertet den Output korrekt aus
|
||||
- Tasks können kombiniert werden: `assembleDebug test`, `assembleDebug assembleRelease` etc.
|
||||
- `execution_subagent` meldet `BUILD SUCCESSFUL` zuverlässig, auch wenn Gradle Warnungen auf stderr ausgibt
|
||||
|
||||
#### Variante B – via `run_in_terminal` (PowerShell direkt)
|
||||
|
||||
```powershell
|
||||
$env:ANDROID_HOME = "C:\Users\JensR\AppData\Local\Android\Sdk"
|
||||
|
|
@ -66,7 +79,9 @@ cd "x:\krisenvorrat"
|
|||
.\gradlew.bat assembleDebug 2>&1 | Out-String
|
||||
```
|
||||
|
||||
**Wichtig:** Niemals `.\gradlew.bat ... 2>&1` ohne `| Out-String` verwenden – PowerShell interpretiert stderr-Warnungen sonst als Fehler und zeigt Exit-Code 1, obwohl Gradle `BUILD SUCCESSFUL` meldet.
|
||||
**Wichtig:** Hier **muss** `.\gradlew.bat` (mit `.bat`) und `| Out-String` verwendet werden –
|
||||
ohne `.bat` kann PowerShell die Ausgabe falsch interpretieren; ohne `| Out-String` werden
|
||||
stderr-Warnungen als Fehler gewertet und Exit-Code 1 zurückgegeben, obwohl Gradle `BUILD SUCCESSFUL` meldet.
|
||||
|
||||
---
|
||||
|
||||
|
|
|
|||
|
|
@ -9,43 +9,51 @@ Requirements file: anforderungen-v1.md + Anforderungen/design/requirements.md
|
|||
|
||||
### Candidate Table
|
||||
|
||||
| Name | Seed-Hex | Primär (Dark) | Charakter | M3-kompatibel | Lesbarkeit | Score |
|
||||
|------|----------|----------------|-----------|---------------|------------|-------|
|
||||
| A1 – Forest Green | `#2E7D32` | `#6EC072` (tone 80) | Klassisch dunkelgrün, bekannt, klar | ✅ | ✅ | 8 |
|
||||
| A2 – Olivgrün / Militär | `#4A6741` | `#9CCB91` (tone 80) | Gedeckt, olivfarben, "Krisenvorrat"-Thema | ✅ | ✅ | 9 |
|
||||
| A3 – Dunkelgrün Pure | `#1B5E20` | `#54BA5B` (tone 80) | Sehr satt, fast schwarz-grün, industriell | ✅ | ✅ | 7 |
|
||||
| A4 – Waldgrün warm | `#3A5F3A` | `#8FCC8F` (tone 80) | Warm, natürlich, dezent | ✅ | ✅ | 8 |
|
||||
| Name | Seed-Hex | Primär (Dark) | Charakter | M3-kompatibel | Lesbarkeit | Score |
|
||||
| ----------------------- | --------- | ------------------- | ----------------------------------------- | ------------- | ---------- | ----- |
|
||||
| A1 – Forest Green | `#2E7D32` | `#6EC072` (tone 80) | Klassisch dunkelgrün, bekannt, klar | ✅ | ✅ | 8 |
|
||||
| A2 – Olivgrün / Militär | `#4A6741` | `#9CCB91` (tone 80) | Gedeckt, olivfarben, "Krisenvorrat"-Thema | ✅ | ✅ | 9 |
|
||||
| A3 – Dunkelgrün Pure | `#1B5E20` | `#54BA5B` (tone 80) | Sehr satt, fast schwarz-grün, industriell | ✅ | ✅ | 7 |
|
||||
| A4 – Waldgrün warm | `#3A5F3A` | `#8FCC8F` (tone 80) | Warm, natürlich, dezent | ✅ | ✅ | 8 |
|
||||
|
||||
> Material 3 erzeugt aus dem Seed automatisch: primary, secondary, tertiary, surface, background, error – alle in Light + Dark. Anthrazit-Töne entstehen aus dem Low-Chroma-Neutral-Palette des Seeds.
|
||||
|
||||
### Details
|
||||
|
||||
#### A1 – Forest Green (`#2E7D32`)
|
||||
|
||||
**Charakter:** Klassisches "Material Green 800". Klar erkennbar, professionell, gute Kontraste.
|
||||
**Dark-Theme-Primary:** ~`#6EC072` – mittelgrüner Akzent auf dunklem Hintergrund.
|
||||
**Surfaces (Dark):** `#131A13` (Surface), `#1E251E` (SurfaceVariant) – dezent dunkelgrüne Tönung.
|
||||
**Surfaces (Dark):** `#131A13` (Surface), `#1E251E` (SurfaceVariant) – dezent dunkelgrüne Tönung.
|
||||
|
||||
- ✅ Must: Alle erfüllt
|
||||
- ✅ Should: Erkennbarer Charakter, solide Kontraste
|
||||
- ⚠️ Missing: Nicht maximale "Krisenvorrat"-Eigenständigkeit – wirkt leicht wie Standard-Material-Grün
|
||||
|
||||
#### A2 – Olivgrün / Militärgrün (`#4A6741`)
|
||||
|
||||
**Charakter:** Gedämpftes Oliv-Grün, militärische/Outdoor-Assoziation. Sehr gut zum Krisenvorrat-Kontext.
|
||||
**Dark-Theme-Primary:** ~`#9CCB91` – warmes, helles Olivgrün auf dunklem Hintergrund.
|
||||
**Surfaces (Dark):** `#14191A` – leicht grünlich-anthrazit, sehr angenehm für den Ausdruck "Krisenvorrat".
|
||||
**Surfaces (Dark):** `#14191A` – leicht grünlich-anthrazit, sehr angenehm für den Ausdruck "Krisenvorrat".
|
||||
|
||||
- ✅ Must: Alle erfüllt
|
||||
- ✅ Should: Maximale thematische Eigenständigkeit, excellent Lesbarkeit
|
||||
- ✅ Nice-to-Have: Ausgeprägte grüne Tönung der neutralen Flächen
|
||||
|
||||
#### A3 – Dunkelgrün Pure (`#1B5E20`)
|
||||
|
||||
**Charakter:** Material Green 900 – sehr dunkel, fast schwarz-grün. Dramatischer Effekt.
|
||||
**Dark-Theme-Primary:** ~`#54BA5B` – lebhaftes Grün, guter Kontrast.
|
||||
**Surfaces (Dark):** Sehr dunkle Flächen mit kaum sichtbarer Grün-Tönung.
|
||||
**Surfaces (Dark):** Sehr dunkle Flächen mit kaum sichtbarer Grün-Tönung.
|
||||
|
||||
- ✅ Must: Alle erfüllt
|
||||
- ⚠️ Should: Surfaces wirken fast wie reines Schwarz, verliert Eigenständigkeit
|
||||
- ⚠️ Risiko: Wenig Differenzierung zwischen primärer Farbe und Surfaces
|
||||
|
||||
#### A4 – Waldgrün warm (`#3A5F3A`)
|
||||
**Charakter:** Warmer, natürlicher Grünton – liegt zwischen A1 und A2.
|
||||
|
||||
**Charakter:** Warmer, natürlicher Grünton – liegt zwischen A1 und A2.
|
||||
|
||||
- ✅ Must: Alle erfüllt
|
||||
- ✅ Should: Gute Balance zwischen klar und charaktervoll
|
||||
- ⚠️ Missing: Leicht ähnlich zu A1, keine starke Eigenständigkeit
|
||||
|
|
@ -56,15 +64,16 @@ Requirements file: anforderungen-v1.md + Anforderungen/design/requirements.md
|
|||
|
||||
### Candidate Table
|
||||
|
||||
| Option | Beschreibung | API-Anforderung | Markenkonsistenz | Wartungsaufwand | Score |
|
||||
|--------|-------------|-----------------|------------------|-----------------|-------|
|
||||
| B1 – Fixed Palette (custom Theme) | Fest definierte Farben aus Theme Builder | Android 5+ (API 21) | ✅ Immer gleich | Niedrig | 9 |
|
||||
| B2 – Dynamic Color (wallpaper-basiert) | Monet-basiert, folgt dem Wallpaper | Android 12+ (API 31) | ❌ Variable | Niedrig | 3 |
|
||||
| B3 – Hybrid: Fixed + Optional Dynamic | Fixed Palette als Fallback, Dynamic ab API 31 | Android 5+ mit Opt-in | ⚠️ Variabel auf API 31+ | Mittel | 6 |
|
||||
| Option | Beschreibung | API-Anforderung | Markenkonsistenz | Wartungsaufwand | Score |
|
||||
| -------------------------------------- | --------------------------------------------- | --------------------- | ----------------------- | --------------- | ----- |
|
||||
| B1 – Fixed Palette (custom Theme) | Fest definierte Farben aus Theme Builder | Android 5+ (API 21) | ✅ Immer gleich | Niedrig | 9 |
|
||||
| B2 – Dynamic Color (wallpaper-basiert) | Monet-basiert, folgt dem Wallpaper | Android 12+ (API 31) | ❌ Variable | Niedrig | 3 |
|
||||
| B3 – Hybrid: Fixed + Optional Dynamic | Fixed Palette als Fallback, Dynamic ab API 31 | Android 5+ mit Opt-in | ⚠️ Variabel auf API 31+ | Mittel | 6 |
|
||||
|
||||
### Details
|
||||
|
||||
#### B1 – Fixed Custom Palette ✅ **Empfohlen**
|
||||
|
||||
```kotlin
|
||||
// In Theme.kt
|
||||
val DarkColorScheme = darkColorScheme(
|
||||
|
|
@ -75,22 +84,26 @@ val DarkColorScheme = darkColorScheme(
|
|||
)
|
||||
MaterialTheme(colorScheme = DarkColorScheme) { ... }
|
||||
```
|
||||
|
||||
- ✅ Funktioniert auf allen Android-Versionen
|
||||
- ✅ Konsistente "Krisenvorrat"-Markenidentität bei jedem User
|
||||
- ✅ Einfache Implementierung, geringer Wartungsaufwand
|
||||
- ✅ Die grün/anthrazite Ästhetik wird IMMER angezeigt
|
||||
|
||||
#### B2 – Dynamic Color (Monet)
|
||||
|
||||
```kotlin
|
||||
val colorScheme = if (Build.VERSION.SDK_INT >= 31) {
|
||||
dynamicDarkColorScheme(LocalContext.current)
|
||||
} else darkColorScheme(...)
|
||||
```
|
||||
|
||||
- 🔴 Verliert grüne Ästhetik – App sieht aus wie jede andere App
|
||||
- 🔴 Schließt Android 8–11 aus (>30% Marktanteil)
|
||||
- ❌ Does not fit: "Krisenvorrat-Ästhetik" ist explizit gefordert
|
||||
|
||||
#### B3 – Hybrid
|
||||
|
||||
- ⚠️ Komplexität ohne echten Mehrwert für diesen Use Case
|
||||
- ⚠️ Auf Android 12+ weicht die "Krisenvorrat"-Ästhetik ab
|
||||
|
||||
|
|
@ -100,17 +113,18 @@ val colorScheme = if (Build.VERSION.SDK_INT >= 31) {
|
|||
|
||||
### Candidate Table
|
||||
|
||||
| Font | Dependency | Stil | Zahlen-Lesbarkeit | Compose-Support | Score |
|
||||
|------|-----------|------|-------------------|-----------------|-------|
|
||||
| C1 – Roboto (System) | Keine | Sachlich, neutral | ✅ Exzellent | Native | 8 |
|
||||
| C2 – Inter (Google Fonts) | `ui-text-google-fonts` | Modern, clean | ✅ Sehr gut | Via GoogleFont API | 7 |
|
||||
| C3 – Roboto Condensed | `ui-text-google-fonts` | Kompakt, industriell | ✅ Sehr gut | Via GoogleFont API | 7 |
|
||||
| C4 – Source Sans 3 | `ui-text-google-fonts` | UI-optimiert, klar | ✅ Sehr gut | Via GoogleFont API | 7 |
|
||||
| C5 – Roboto (default M3 TypeScale) | Keine | M3-Standard | ✅ Exzellent | Native | 9 |
|
||||
| Font | Dependency | Stil | Zahlen-Lesbarkeit | Compose-Support | Score |
|
||||
| ---------------------------------- | ---------------------- | -------------------- | ----------------- | ------------------ | ----- |
|
||||
| C1 – Roboto (System) | Keine | Sachlich, neutral | ✅ Exzellent | Native | 8 |
|
||||
| C2 – Inter (Google Fonts) | `ui-text-google-fonts` | Modern, clean | ✅ Sehr gut | Via GoogleFont API | 7 |
|
||||
| C3 – Roboto Condensed | `ui-text-google-fonts` | Kompakt, industriell | ✅ Sehr gut | Via GoogleFont API | 7 |
|
||||
| C4 – Source Sans 3 | `ui-text-google-fonts` | UI-optimiert, klar | ✅ Sehr gut | Via GoogleFont API | 7 |
|
||||
| C5 – Roboto (default M3 TypeScale) | Keine | M3-Standard | ✅ Exzellent | Native | 9 |
|
||||
|
||||
### Details
|
||||
|
||||
#### C5 – Roboto (default Material 3 TypeScale) ✅ **Empfohlen**
|
||||
|
||||
Jetpack Compose Material 3 verwendet Roboto als Standard. Die M3-TypeScale (Display/Headline/Title/Body/Label × Large/Medium/Small) ist bereits optimal für Android konfiguriert.
|
||||
|
||||
**Keine zusätzliche Abhängigkeit, keine Netzwerk-Anfragen, kein APK-Overhead.**
|
||||
|
|
@ -122,24 +136,29 @@ MaterialTheme(
|
|||
...
|
||||
)
|
||||
```
|
||||
|
||||
- ✅ Alle Must-Haves erfüllt: Exzellente Lesbarkeit, zahlenfreundlich, M3-kompatibel
|
||||
- ✅ Should: Sachliche, klare Anmutung – passt zu "klar, funktional, industriell"
|
||||
- ✅ Kein Google-Fonts-Netzwerkaufruf
|
||||
- ⚠️ Nice-to-Have: Keine typografische Eigenständigkeit gegenüber Standard-Android
|
||||
|
||||
#### C2 – Inter (Google Fonts)
|
||||
|
||||
Beliebt in modernen UI-Projekten, leicht breitere Buchstabenform als Roboto.
|
||||
|
||||
```kotlin
|
||||
val interFamily = FontFamily(
|
||||
Font(GoogleFont("Inter"), weight = FontWeight.Normal),
|
||||
Font(GoogleFont("Inter"), weight = FontWeight.Bold)
|
||||
)
|
||||
```
|
||||
|
||||
- ✅ Slightly more distinct appearance
|
||||
- ⚠️ Benötigt `androidx.compose.ui:ui-text-google-fonts` Dependency
|
||||
- ⚠️ First-launch Netzwerkabruf (downloadable fonts) – nicht Offline-First
|
||||
|
||||
#### C3 – Roboto Condensed
|
||||
|
||||
- ✅ Passt gut zu "industriellem" Look
|
||||
- ⚠️ Auf kleinen Screens kann Kondensierung die Lesbarkeit bei kleineren Schriftgraden reduzieren
|
||||
|
||||
|
|
@ -149,16 +168,17 @@ val interFamily = FontFamily(
|
|||
|
||||
### Candidate Table
|
||||
|
||||
| Library | Icons | Compose-nativ | Dependency | Lizenz | APK-Impact | Score |
|
||||
|---------|-------|---------------|------------|--------|------------|-------|
|
||||
| D1 – Material Icons Extended | ~900 | ✅ Nativ | `compose.material:material-icons-extended` | Apache 2.0 | ~3MB (ProGuard eliminiert unused) | 9 |
|
||||
| D2 – Lucide Icons (Compose) | ~1.400 | ✅ Nativ | `com.composables:icons-lucide` | ISC | ~4MB | 7 |
|
||||
| D3 – Phosphor for Compose | ~1.600 | ✅ Nativ | `com.composables:icons-phosphor` | MIT | ~5MB | 7 |
|
||||
| D4 – Custom SVG Icons | unbegrenzt | Via VectorDrawable | Kein | Eigen | Minimal | 4 |
|
||||
| Library | Icons | Compose-nativ | Dependency | Lizenz | APK-Impact | Score |
|
||||
| ---------------------------- | ---------- | ------------------ | ------------------------------------------ | ---------- | --------------------------------- | ----- |
|
||||
| D1 – Material Icons Extended | ~900 | ✅ Nativ | `compose.material:material-icons-extended` | Apache 2.0 | ~3MB (ProGuard eliminiert unused) | 9 |
|
||||
| D2 – Lucide Icons (Compose) | ~1.400 | ✅ Nativ | `com.composables:icons-lucide` | ISC | ~4MB | 7 |
|
||||
| D3 – Phosphor for Compose | ~1.600 | ✅ Nativ | `com.composables:icons-phosphor` | MIT | ~5MB | 7 |
|
||||
| D4 – Custom SVG Icons | unbegrenzt | Via VectorDrawable | Kein | Eigen | Minimal | 4 |
|
||||
|
||||
### Details
|
||||
|
||||
#### D1 – Material Icons Extended ✅ **Empfohlen**
|
||||
|
||||
Die offizielle Google-Icon-Bibliothek für Compose. Enthält alle benötigten Icons für diese App:
|
||||
`Inventory2`, `Category`, `Place`, `Warning`, `DateRange`, `Edit`, `Delete`, `FileUpload`, `FileDownload`, `Settings`, `Search`, `Home`, `List`, `ShoppingCart`, `NotificationsActive`, `Add`, `Remove`, `MoreVert`, etc.
|
||||
|
||||
|
|
@ -178,16 +198,19 @@ Icon(Icons.Filled.Warning, contentDescription = "Warnung")
|
|||
- ⚠️ Nice-to-Have: Nicht maximale Eigenständigkeit (sehen wie Standard-Android aus)
|
||||
|
||||
#### D2 – Lucide Icons
|
||||
|
||||
- ✅ Größere Auswahl, moderner Look
|
||||
- ⚠️ Drittanbieter-Dependency, noch nicht so etabliert in Android-Community
|
||||
- ⚠️ Nicht von Google maintained → Long-term Support-Risiko
|
||||
|
||||
#### D3 – Phosphor
|
||||
|
||||
- ✅ Größte Auswahl, mehrere Styles (thin/light/regular/bold/fill/duotone)
|
||||
- ⚠️ Drittanbieter, Community-maintained
|
||||
- ⚠️ "Duotone"-Styles funktionieren in Compose nicht nativ
|
||||
|
||||
#### D4 – Custom SVG Icons
|
||||
|
||||
- 🔴 Sehr hoher Aufwand (jedes Icon muss als VectorDrawable erstellt werden)
|
||||
- Nur sinnvoll für wenige, besondere Brand-Icons
|
||||
|
||||
|
|
@ -199,22 +222,25 @@ Date: 2026-05-13
|
|||
Decided by: User
|
||||
|
||||
### A – Seed Color
|
||||
|
||||
**Gewählt:** `#4A6741` (Olivgrün / Militärgrün)
|
||||
**Begründung:** Passt thematisch optimal zum Krisenvorrat-Kontext. Material 3 generiert daraus einen anthrazitgrünen Dark-Theme-Look mit dezenter Grün-Tönung der Surfaces.
|
||||
**Alternativen:** `#2E7D32` (Forest Green, zu generisch), `#1B5E20` (zu dunkel), `#3A5F3A` (zu ähnlich zu Forest Green)
|
||||
|
||||
### B – Dynamic Color
|
||||
|
||||
**Gewählt:** Fixed Custom Palette (B1)
|
||||
**Begründung:** App-Identität ("Krisenvorrat"-Ästhetik) muss konsistent bleiben. Dynamic Color würde das grüne Branding überschreiben. Fixed Palette funktioniert auf allen Android-Versionen.
|
||||
**Alternativen:** Dynamic Color (verliert Branding), Hybrid (unnötige Komplexität)
|
||||
|
||||
### C – Typography
|
||||
|
||||
**Gewählt:** Default Roboto M3 TypeScale (C5)
|
||||
**Begründung:** Null Overhead, exzellente Lesbarkeit für zahlen-/datenlastige Ansichten, sachlich-industrielle Anmutung. Eigenständigkeit kommt über die Farbwahl, nicht den Font.
|
||||
**Alternativen:** Inter (Netzwerk-Dependency), Roboto Condensed (Lesbarkeitsverlust bei kleinen Graden)
|
||||
|
||||
### D – Icon-Set
|
||||
|
||||
**Gewählt:** Material Icons Extended (D1)
|
||||
**Begründung:** Native Compose-Integration, alle benötigten Icons vorhanden, von Google gepflegt, APK-Overhead durch R8 eliminiert.
|
||||
**Alternativen:** Lucide (Drittanbieter-Risiko), Phosphor (Drittanbieter-Risiko), Custom SVG (zu aufwändig)
|
||||
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ Author: Tech-Decision Workflow
|
|||
Vor der Implementierung der ersten UI-Screens müssen vier visuelle Designentscheidungen getroffen werden, die direkt in die Compose-Theme-Datei einfließen. Die App ist eine native Android-App (Kotlin + Jetpack Compose + Material 3).
|
||||
|
||||
Übergeordnetes Design-Ziel laut Anforderungen (anforderungen-v1.md, Abschnitt 6):
|
||||
|
||||
- **Stil:** Klar, funktional, industriell
|
||||
- **UI-Framework:** Material 3 Komponenten
|
||||
- **Farbschema:** Dark Theme, Dunkelgrün / Anthrazit – "Krisenvorrat-Ästhetik", gut lesbar
|
||||
|
|
|
|||
|
|
@ -4,7 +4,8 @@
|
|||
android:height="108dp"
|
||||
android:viewportWidth="108"
|
||||
android:viewportHeight="108">
|
||||
<!-- Dunkles Olivgrün – Prepper/Survival-Stil -->
|
||||
<path
|
||||
android:fillColor="#4CAF50"
|
||||
android:fillColor="#3D5229"
|
||||
android:pathData="M0,0h108v108H0z" />
|
||||
</vector>
|
||||
|
|
|
|||
|
|
@ -4,7 +4,133 @@
|
|||
android:height="108dp"
|
||||
android:viewportWidth="108"
|
||||
android:viewportHeight="108">
|
||||
|
||||
<!-- === Prepper-Stoffratte (IKEA Gosig-Style) === -->
|
||||
|
||||
<!-- Schwanz (hinter dem Körper) -->
|
||||
<path
|
||||
android:strokeColor="#B5956E"
|
||||
android:strokeWidth="3"
|
||||
android:strokeLineCap="round"
|
||||
android:pathData="M68,76 Q82,66 78,52 Q75,42 82,36" />
|
||||
|
||||
<!-- Rucksack (hinter dem Körper, rechts) -->
|
||||
<path
|
||||
android:fillColor="#5D7A3D"
|
||||
android:pathData="M65,54 L73,54 Q77,54 77,58 L77,70 Q77,74 73,74 L65,74 Q61,74 61,70 L61,58 Q61,54 65,54 Z" />
|
||||
<!-- Rucksack Deckelklappe -->
|
||||
<path
|
||||
android:fillColor="#4A6330"
|
||||
android:pathData="M61,54 L77,54 L77,59 L61,59 Z" />
|
||||
<!-- Rucksack Trageriemen -->
|
||||
<path
|
||||
android:strokeColor="#4A6330"
|
||||
android:strokeWidth="1.5"
|
||||
android:strokeLineCap="round"
|
||||
android:pathData="M67,54 L63,48 M73,54 L69,48" />
|
||||
|
||||
<!-- Körper (runde Birnenform – Stofftier-Stil) -->
|
||||
<path
|
||||
android:fillColor="#C4A882"
|
||||
android:pathData="M38,55 C38,49 44,45 54,45 C64,45 70,49 70,55 L70,76 C70,84 63,89 54,89 C45,89 38,84 38,76 Z" />
|
||||
|
||||
<!-- Bauch (heller) -->
|
||||
<path
|
||||
android:fillColor="#D9C4A0"
|
||||
android:pathData="M44,58 C44,55 48,53 54,53 C60,53 64,55 64,58 L64,78 C64,83 60,85 54,85 C48,85 44,83 44,78 Z" />
|
||||
|
||||
<!-- Pfoten -->
|
||||
<path
|
||||
android:fillColor="#D9C4A0"
|
||||
android:pathData="M40,83 m-4,0 a4,2.5 0 1,0 8,0 a4,2.5 0 1,0 -8,0" />
|
||||
<path
|
||||
android:fillColor="#D9C4A0"
|
||||
android:pathData="M68,83 m-4,0 a4,2.5 0 1,0 8,0 a4,2.5 0 1,0 -8,0" />
|
||||
|
||||
<!-- Kopf (großer Kreis) -->
|
||||
<path
|
||||
android:fillColor="#C4A882"
|
||||
android:pathData="M54,38 m-17,0 a17,16 0 1,0 34,0 a17,16 0 1,0 -34,0" />
|
||||
|
||||
<!-- Linkes Ohr (außen) -->
|
||||
<path
|
||||
android:fillColor="#C4A882"
|
||||
android:pathData="M37,26 m-10,0 a10,10 0 1,0 20,0 a10,10 0 1,0 -20,0" />
|
||||
<!-- Rechtes Ohr (außen) -->
|
||||
<path
|
||||
android:fillColor="#C4A882"
|
||||
android:pathData="M71,26 m-10,0 a10,10 0 1,0 20,0 a10,10 0 1,0 -20,0" />
|
||||
<!-- Linkes Ohr (innen, rosa) -->
|
||||
<path
|
||||
android:fillColor="#F0B8A8"
|
||||
android:pathData="M37,26 m-7,0 a7,7 0 1,0 14,0 a7,7 0 1,0 -14,0" />
|
||||
<!-- Rechtes Ohr (innen, rosa) -->
|
||||
<path
|
||||
android:fillColor="#F0B8A8"
|
||||
android:pathData="M71,26 m-7,0 a7,7 0 1,0 14,0 a7,7 0 1,0 -14,0" />
|
||||
|
||||
<!-- Schnauze (heller Bereich) -->
|
||||
<path
|
||||
android:fillColor="#D9C4A0"
|
||||
android:pathData="M54,43 m-8,0 a8,5 0 1,0 16,0 a8,5 0 1,0 -16,0" />
|
||||
|
||||
<!-- Schnurrhaare links -->
|
||||
<path
|
||||
android:strokeColor="#9B8668"
|
||||
android:strokeWidth="1"
|
||||
android:strokeLineCap="round"
|
||||
android:pathData="M46,42 L30,39" />
|
||||
<path
|
||||
android:strokeColor="#9B8668"
|
||||
android:strokeWidth="1"
|
||||
android:strokeLineCap="round"
|
||||
android:pathData="M46,44 L30,45" />
|
||||
<!-- Schnurrhaare rechts -->
|
||||
<path
|
||||
android:strokeColor="#9B8668"
|
||||
android:strokeWidth="1"
|
||||
android:strokeLineCap="round"
|
||||
android:pathData="M62,42 L78,39" />
|
||||
<path
|
||||
android:strokeColor="#9B8668"
|
||||
android:strokeWidth="1"
|
||||
android:strokeLineCap="round"
|
||||
android:pathData="M62,44 L78,45" />
|
||||
|
||||
<!-- Augen -->
|
||||
<path
|
||||
android:fillColor="#2C2C2C"
|
||||
android:pathData="M46,36 m-3.5,0 a3.5,3.5 0 1,0 7,0 a3.5,3.5 0 1,0 -7,0" />
|
||||
<path
|
||||
android:fillColor="#2C2C2C"
|
||||
android:pathData="M62,36 m-3.5,0 a3.5,3.5 0 1,0 7,0 a3.5,3.5 0 1,0 -7,0" />
|
||||
<!-- Augen-Glanzpunkte -->
|
||||
<path
|
||||
android:fillColor="#FFFFFF"
|
||||
android:pathData="M54,30 C54,30 34,50 34,65 C34,76 43,84 54,84 C65,84 74,76 74,65 C74,50 54,30 54,30 Z" />
|
||||
android:pathData="M44.5,34.5 m-1.2,0 a1.2,1.2 0 1,0 2.4,0 a1.2,1.2 0 1,0 -2.4,0" />
|
||||
<path
|
||||
android:fillColor="#FFFFFF"
|
||||
android:pathData="M60.5,34.5 m-1.2,0 a1.2,1.2 0 1,0 2.4,0 a1.2,1.2 0 1,0 -2.4,0" />
|
||||
|
||||
<!-- Nase (rosa) -->
|
||||
<path
|
||||
android:fillColor="#E8838A"
|
||||
android:pathData="M54,41.5 m-2.5,0 a2.5,2 0 1,0 5,0 a2.5,2 0 1,0 -5,0" />
|
||||
|
||||
<!-- Mund -->
|
||||
<path
|
||||
android:strokeColor="#9B8668"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeLineCap="round"
|
||||
android:pathData="M51,46 Q54,49 57,46" />
|
||||
|
||||
<!-- Bandana (rot – Prepper/Survival) -->
|
||||
<path
|
||||
android:fillColor="#C0392B"
|
||||
android:pathData="M37,48 Q54,56 71,48 L69,52 Q54,58 39,52 Z" />
|
||||
<!-- Bandana-Knoten -->
|
||||
<path
|
||||
android:fillColor="#962D22"
|
||||
android:pathData="M52,56 L49,63 L54,60 L59,63 L56,56 Z" />
|
||||
|
||||
</vector>
|
||||
|
|
|
|||
Loading…
Reference in a new issue