2013-04-10 93 views
7

我想在某些按钮上引入“向下”的样式。我创建了一个样式和一个状态列表。Android:在点击按钮上设置Alpha。最好只用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> 

的问题是,我希望能够在按钮被点击时,改变背景的只是阿尔法(我将有变数的背景,所以设置的alpha通道一经售出颜色不是一个解决方案)。

而我想从声明xml中做到这一点(不想用布局东西来监视我的代码)。

问题是我不知道如何将这个alpha混合应用到xml drawable的按钮。 我很确定有一种方法。

+0

有一种使用动画的代码。我已经做到了,如果你想从java做到这一点,我可以把它作为答案。 – Ankit 2013-12-21 15:03:06

回答

0

你将不得不在你的代码中加入

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

不一定。我知道我*可以*以编程方式设置它。如果我使用纯色背景(通过#AARRGGBB可绘制),并且它可以工作,我也可以只将它设置为XML。许多类似的东西可以在不编写一行java代码的情况下实现。为什么没有办法将xml设置为可绘制的,这对我来说仍然是个谜。 – George 2013-04-10 12:54:03

+0

我不认为这是可能的...有一个属性android:alpha,但它只适用于视图,而不是可绘制的。此外,它仅在API级别11之后才可用。 – 2013-04-10 12:56:11

+0

要在XML中执行此操作,您需要一些类似于android:foreground的参数,以允许您指定位于视图顶部的drawable。不幸的是,现在还不存在,所以AFAIK没有办法只用XML来做到这一点。 – greg7gkb 2013-08-27 19:11:00

-1

这将几乎做到这一点。那么,它的工作对我来说

<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

我有点晚来回答这个问题,但我只是通过改变使用View.onTouchListner

Alpha值

您可以通过这种方式实现

做onTouch该这样做
@Override 
public boolean onTouch(View v, MotionEvent event) { 

    switch (event.getAction()) 
    { 
     case MotionEvent.ACTION_DOWN: 
      v.setAlpha(0.5f); 
      break; 
     case MotionEvent.ACTION_UP: 
      v.setAlpha(1f); 
     default : 
     v.setAlpha(1f) 
    } 
    return false; 
} 

我想你不能改变可绘制的alpha值,所以你将不得不以这种方式做到这一点。

+0

您应该处理默认情况下的alpha重置。例如,如果ACTION取消,该按钮将保持一半不透明状态。 – couceirof 2015-11-26 11:34:50

+0

雅你是对的,我也面临同样的问题。我改变了我的代码。我已经更新了答案 – 2015-11-29 06:28:08

3

这工作完全


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

添加东西迈克尔回答,如果你正在寻找一个“软”单击动画。我加了这一点:

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; 
     } 
    }); 
} 

谎言相同的想法,但与动画

0

我知道那很老的问题,但是根据这是有关alpha变化使用的问题,我看不到正确的答案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> 

所以,如果你只有正常状态绘制(假设其btn_background.png),你需要它50%的α-在按下状态下,你所要做的就是创建相应的xml-drawable,名为pressed pressed的button_button_background.xml(在drawable文件夹中,no-dpi!)。因此,这应该是像下面:

<?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" /> 

这同样适用于禁用状态,唯一的区别,我想,是阿尔法水平,这对这个国家也能像30%或任何设计师说/希望)。所以较短的版本将如下所示(对于带有可绘制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>