Gibt es eine Möglichkeit, das Alpha von Drawable mithilfe von XML festzulegen?

Lesezeit: 7 Minuten

Einfach wie sich selbst. Ich möchte einen Alpha-Button erstellen, der auf diese Weise ein ausgewähltes Drawable hätte:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- Play/Pause -->
    <item android:state_selected="false" android:drawable="https://stackoverflow.com/questions/8179250/@drawable/item" />
    <item android:state_selected="true" android:drawable="https://stackoverflow.com/questions/8179250/@drawable/item" />

</selector>

Ich würde sowas machen wollen:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- Play/Pause -->
    <item android:alpha="125" android:state_selected="false" android:drawable="https://stackoverflow.com/questions/8179250/@drawable/item" />
    <item android:alpha="255" android:state_selected="true" android:drawable="https://stackoverflow.com/questions/8179250/@drawable/item" />

</selector>

Danke für alles .

  • Auch das versuche ich noch herauszufinden. Etwas Glück?

    – Übersetzungsverlust

    6. Dezember 2015 um 14:34 Uhr

  • Ersetzen Sie Ihre XxxView durch AppCompatXxxView in Ihrem Layout-XML und folgen Sie den Ratschlägen von @kikettas: stackoverflow.com/a/37947545/3810036

    – Garry Dias

    16. August 2018 um 22:14 Uhr

Benutzer-Avatar
Kasium

Es ist eine Weile her seit dem OP, aber ich persönlich habe eine Lösung gefunden, die für mich viel besser funktioniert hat als die vorgeschlagenen Antworten. Ein … Erstellen BitmapDrawable macht es einfach möglich, das Alpha zu setzen:

<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="https://stackoverflow.com/questions/8179250/@drawable/your_drawble"
    android:alpha="77">
</bitmap>

Alpha kann ein beliebiger Wert zwischen 0 und 255 sein. Beachten Sie, dass es sich um eine Art Umkehrung des HEX-Farbwerts Alpha handelt, da beispielsweise 70 % Alpha B3 in HEX und 77 in BitmapDrawable wären.

  • Tatsächlich war Alpha in XML vom Float-Typ, es sollte einen Wert zwischen 0,0 und 1,0 haben.

    – liuyong

    2. Juni 2015 um 9:04 Uhr

  • @liuyong Das mag für Aufrufe gelten, aber nicht für <bitmap>. Die Fähigkeit, das “Alpha” von a einzustellen <bitmap> ist eine derzeit nicht dokumentierte Funktion, die möglicherweise funktioniert oder nicht. Der Wert stellt auch nicht wirklich den Alpha-Wert im herkömmlichen Sinne dar, sondern eher sein Gegenteil, die Deckkraft, weshalb man – falls es denn funktionieren sollte – für den Wert 255 und volle Deckkraft ein komplett transparentes Bitmap erhalten würde mit dem Wert 0.

    – sfera

    5. August 2015 um 12:55 Uhr


  • @sfera, gibt es eine Möglichkeit, dies in XML zu tun, oder haben wir kein Glück?

    – Übersetzungsverlust

    6. Dezember 2015 um 14:31 Uhr

  • @liuyong Was die Android-Dokumentation angeht, nehme ich an, dass wir kein Glück haben. Das undokumentierte Alpha-Attribut scheint auf Android 5+ zu funktionieren, aber das hilft nicht, wenn man frühere Versionen unterstützen möchte. Sie könnten transparente Ressourcen generieren oder versuchen, Symbolschriften zu verwenden. Verpacken der Bitmap in a NinePatch scheint auch auf Android 5+ zu funktionieren, aber ich habe es nicht auf früheren Versionen getestet. Bitte sagen Sie, wenn Sie eine andere Option finden.

    – sfera

    7. Dezember 2015 um 9:20 Uhr

  • Dies funktioniert nur für tatsächliche Bilder, nicht für Drawable (z. B. Farbe).

    – TWiStErRob

    22. April 2016 um 12:02 Uhr

Benutzer-Avatar
Prashant

Ich habe das gleiche mit einem drawable erreicht

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <solid android:color="#5000ddff" />
</shape>

Hier drüben wurde das Alpha 50 verwendet, das die Deckkraft festlegt. Ich hoffe, das hilft

  • Das ist nützlich. Wenn Sie dies in Kombination mit einer Ebenenliste und Ihrem eigenen Zeichenelement verwenden, können Sie ein Zeichenelement für einen gedrückten Zustand erstellen.

    – Robert

    17. März 2015 um 5:20 Uhr

  • Ich habe es nicht verstanden, wie ändert es das Alpha eines Drawables?

    – M. Usman Khan

    26. Dezember 2015 um 7:56 Uhr

  • Hex-Werte werden paarweise beschrieben. Die ersten 2 stellen das Alpha dar (für Android sind es sowieso manchmal die letzten 2). Die nächsten 3 Paare repräsentieren Rot – Blau – Grün #5000ddff alpha(50) red(00) blue(dd) green(ff)

    – dblackker

    29. November 2016 um 17:19 Uhr

  • Leider beantwortet dies nicht das OP, bei dem es darum ging, das Alpha von a zu ändern ziehbarkeine Farbe.

    – Michael A.

    2. August 2018 um 11:16 Uhr

  • Antwort ist richtig, aber 50 % Alpha in Hex ist 256/2 = 128 und daher #80

    – lange

    14. Dezember 2018 um 17:42 Uhr


Benutzer-Avatar
Fredrik Metcalf

Ich habe nach dem gleichen gesucht. Obwohl dies vor über vier Jahren gepostet wurde, ist dies der oberste Beitrag beim Googeln des Problems, also werde ich hier antworten.

Das ist meine Lösung

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="false">
        <bitmap android:alpha="@integer/not_pressed_alpha" android:src="https://stackoverflow.com/questions/8179250/@drawable/item"/>
    </item>
    <item android:state_pressed="true" android:drawable="https://stackoverflow.com/questions/8179250/@drawable/item" />
</selector>

  • Ich habe das versucht. Funktioniert nicht für mich. Auf Emulator getestet (Nexus 5X API 23).

    – Monish Kamble

    31. Mai 2016 um 12:29 Uhr

  • Nach dem Wechsel hat es funktioniert state_selected zu state_pressed.

    – Monish Kamble

    31. Mai 2016 um 12:42 Uhr

  • Ja, das wäre der Normalfall, aber ich habe den Beispielcode aus der Frage verwendet.

    – Fredrik Metcalf

    1. Juni 2016 um 12:47 Uhr

Benutzer-Avatar
Kiketts

Für diejenigen, die das gleiche Problem wie OP haben, erlaubt Ihnen AppCompat jetzt, den Parameter „alpha“ so zu setzen, wie er es in seinem Zielcode wünschte:

    <?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- Play/Pause -->
    <item android:alpha="125" android:state_selected="false" android:drawable="https://stackoverflow.com/questions/8179250/@drawable/item" />
    <item android:alpha="255" android:state_selected="true" android:drawable="https://stackoverflow.com/questions/8179250/@drawable/item" />

</selector>

Mehr Info hier.

Mein Ziel war es, dass eine Schaltfläche ihre ausgewählten und gedrückten Zustände in einem anderen Alpha hat – aber dieselbe (png) Ressource verwendet und so wenige Dateien wie möglich betrifft.

Meine Lösung ähnelt dem Ändern des Alphas in einem BitmapDrawable – aber es geschieht über den Selektor, sodass nur eine Datei betroffen ist.

Verwenden Sie die Tönungsfunktion von Bitmap, denken Sie daran, dass die Tönung die vorhandenen Pixel einfärbt, also verwenden Sie eine weiße Farbe. Beispiel: #80FFFFFF – um die Farbe wie im Original zu halten, aber Alpha um 50 % zu reduzieren. Dies könnte auch verwendet werden, um die Farbe des Symbols zu ändern, wenn es gedrückt wird.

Dies ist meine zeichenbare XML-Datei:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_selected="true">
        <bitmap
            android:src="https://stackoverflow.com/questions/8179250/@drawable/ic_camera"
            android:tint="#80FFFFFF">
        </bitmap>
    </item>
    <item android:state_pressed="true">
        <bitmap
            android:src="https://stackoverflow.com/questions/8179250/@drawable/ic_camera"
            android:tint="#80FFFFFF">
        </bitmap>
    </item>
    <item>
        <bitmap
            android:src="https://stackoverflow.com/questions/8179250/@drawable/ic_camera">
        </bitmap>
    </item>
</selector>

Benutzer-Avatar
Maris B.

Ich verwende Folgendes für ein benutzerdefiniertes Optionsfeld, das diagonal durchgestrichen sein sollte, wenn es deaktiviert ist.

Beispielbild von 5 Optionsfeldern, von denen 4 aktiviert sind

  <item android:state_enabled="false">
    <layer-list>
      <item>
        <shape android:shape="rectangle">
          <size
              android:height="35dp"
              android:width="35dp"/>
          <stroke
              android:color="@color/someGrey"
              android:width="1dp"/>
          <corners android:radius="1dp"/>
        </shape>
      </item>
      <item>
        <rotate
            android:fromDegrees="135"
            android:pivotX="50%"
            android:pivotY="50%"
            android:toDegrees="135">
          <shape android:shape="line">
            <stroke
                android:color="@color/someGrey"
                android:width="1dp"/>
          </shape>
        </rotate>
      </item>
    </layer-list>
  </item>

Benutzer-Avatar
Fernando Silva

Ich stimme dem Vorschlag von Kasium zu, daher ist bei einigen Android-Versionen die Angabe zu Alpha in Prozent.

<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="https://stackoverflow.com/questions/8179250/@drawable/your_drawble"
    android:alpha="0.5">
</bitmap>

1158710cookie-checkGibt es eine Möglichkeit, das Alpha von Drawable mithilfe von XML festzulegen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy