2013-04-10 7 views
7

Ich möchte einen 'down' Stil auf einigen Tasten einführen. Ich habe einen Stil und eine Statusliste erstellt.Android: Legen Sie Alpha auf Schaltfläche bei Klick fest. Vorzugsweise nur xml

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:drawable="@drawable/inactive_button_background" android:state_enabled="false"/> 
    <item android:drawable="@drawable/active_button_background" android:state_enabled="true"/> 
    <item android:drawable="@drawable/pressed_button_background" android:state_pressed="true"></item> 
</selector> 

Das Problem ist, dass ich nur das Alpha des Hintergrundes zu ändern, um der Lage sein soll, wenn die Schaltfläche geklickt wird (ich werde variable Hintergründe haben, so eine verkaufte Farbe mit Alpha-Kanal Einstellung ist keine Lösung).

Und ich möchte dies nur aus dem deklarativen XML (möchte nicht meinen Code mit Layout-Zeug polieren).

Problem ist, ich weiß nicht, wie diese Alpha-Blending auf die Schaltfläche von einem Xml-Zeichen anwendbar ist. Ich bin mir ziemlich sicher, dass es einen Weg gibt.

+0

Es gibt einen Weg von Code mit Animation. Ich habe es getan, wenn Sie es von Java aus tun möchten, kann ich es als Antwort setzen. – Ankit

Antwort

0

Sie müssen etwas in Ihrem Code setzen.

XML

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Text" 
    android:onClick="dialogClicked" /> 

Java

public void dialogClicked(final View view) 
{ 
    ... set the alpha programatically ... 
} 
+4

Nicht unbedingt. Ich weiß, dass ich es programmgesteuert einstellen kann. Ich kann es auch nur XML setzen, wenn ich einen einfarbigen Hintergrund verwende (über #AARRGGBB) und es funktioniert. Viele ähnliche Sachen können erstellt werden, ohne eine Zeile Java-Code zu schreiben. Warum gibt es keine Möglichkeit, Alpha zu einem Zeichen aus Xml zu setzen, bleibt mir ein Rätsel. – George

+0

Ich glaube nicht, dass das möglich ist ... Es gibt ein Attribut android: alpha, aber es gilt nur für Ansichten, nicht für Zeichen. Außerdem ist es erst seit API Level 11 verfügbar. –

+0

Um dies in XML zu tun, benötigen Sie einen Parameter wie android: foreground, mit dem Sie ein Zeichen festlegen können, das über der Ansicht liegt. Leider gibt es das momentan nicht, also gibt es bei AFAIK keine Möglichkeit, dies nur in XML zu tun. – greg7gkb

-1

Dies wird so ziemlich alles tun. Nun, es funktioniert für mich

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true"> 
    <shape> 
     <solid android:color="#5000ddff" /> 
    </shape> 
    </item> 
    <item android:drawable="@color/yourdefaultcolor"/> 
</selector> 
5

ich etwas spät dran bin, diese Frage zu beantworten, aber ich habe gerade dies durch den Alpha-Wert zu ändern mit View.onTouchListner

Sie können dies tun, indem OnTouch auf diese Weise der Umsetzung

Ich denke, Sie können den Alpha-Wert nicht von Drawable ändern, so dass Sie dies nur auf diese Weise tun müssen.

+0

Sie sollten das Zurücksetzen des Alphas als Standardfall behandeln. Wenn ACTION beispielsweise CANCEL ist, bleibt die Schaltfläche halbdeckend. – couceirof

+0

Sie haben Recht. Ich hatte auch das gleiche Problem. Ich habe es in meinem Code geändert. Ich habe die Antwort aktualisiert –

3

Das funktioniert perfekt


yourView.setOnTouchListener(new View.OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     switch (event.getAction()) { 
      case MotionEvent.ACTION_DOWN: { 
       v.setAlpha(0.5f); 
       break; 
      } 
      case MotionEvent.ACTION_UP: 
      case MotionEvent.ACTION_CANCEL: { 
       v.setAlpha(1f); 
       break; 
      } 
     } 
     return false; 
    } 
}); 
0

etwas zu Michael Antwort Hinzufügen, wenn Sie sich für eine "weichere" Klick-Animation suchen. Ich habe diese:

btn.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent motionEvent) { 
      switch (motionEvent.getAction()) 
      { 
       case MotionEvent.ACTION_DOWN: 
        v.animate().alpha(0.3f).setDuration(200).start(); 
        break; 
       case MotionEvent.ACTION_UP: 
        v.animate().alpha(1f).setDuration(200).start(); 
       default : 
        v.setAlpha(1f); 
      } 
      return false; 
     } 
    }); 
} 

mit Lügen auf der gleichen Idee, aber mit einer Animation

0

ich das ist ziemlich alte Frage wissen, aber ich kann nicht die richtige Antwort nach Frage sehen, die über Alpha-Änderung war mit XML.
zu tun, dass Sie Selektor erstellen müssen, die bereits in einer Frage angezeigt wird, und es ist:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:drawable="@drawable/inactive_button_background" android:state_enabled="false"/> 
    <item android:drawable="@drawable/active_button_background" android:state_enabled="true"/> 
    <item android:drawable="@drawable/pressed_button_background" android:state_pressed="true"></item> 
</selector> 

Also, wenn Sie nur Normalzustand ziehbar haben (seine btn_background.png übernehmen), und Sie müssen es 50% alpha Im gedrückten Zustand müssen Sie nur die entsprechende XML-Zeichnungsdatei mit dem Namen pressed_button_background.xml erstellen (im aufklappbaren Ordner, no-dpi!). So soll dies wie folgt:

<?xml version="1.0" encoding="utf-8"?> 
<bitmap xmlns:android="http://schemas.android.com/apk/res/android" 
    android:src="@drawable/btn_background" 
    android:alpha=".5" /> 

Gleiches gilt für deaktivierten Zustand gilt, ist der einzige Unterschied, glaube ich, ist die Alpha-Ebene, die für diesen Zustand wie 30% sein könnte oder was auch immer Designer sagt/will). Die kürzere Version sieht also so aus (für Button mit ziehbarem ic_edit).png):

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
     android:state_enabled="true" 
     android:state_pressed="true"> 
     <bitmap 
      android:src="@drawable/ic_edit" 
      android:alpha=".5" /> 
    </item> 
    <item 
     android:state_enabled="false"> 
     <bitmap 
      android:src="@drawable/ic_edit" 
      android:alpha=".3" /> 
    </item> 
    <item 
     android:drawable="@drawable/ic_edit" /> 
</selector>