7

我想在某些按钮上引入“向下”样式。我创建了一个样式和一个状态列表。

<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(我将有可变的背景,因此使用 alpha 通道设置出售的颜色不是解决方案)。

而且我只想从声明性 xml 中执行此操作(不想用布局的东西污染我的代码)。

问题是我不知道如何将此 alpha 混合应用到 xml drawable 中的按钮。我很确定有办法。

4

6 回答 6

6

我回答这个问题有点晚了,但我只是通过使用 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;
}

我猜你不能从 drawable 改变 alpha 值,所以你只能这样做。

于 2015-02-18T10:50:32.933 回答
6

这完美地工作


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;
    }
});
于 2016-04-09T21:18:21.137 回答
1

如果您正在寻找“更柔和”的点击动画,请在 Michael 的回答中添加一些内容。我添加了这个:

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

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

于 2017-03-30T13:36:17.300 回答
1

我知道那是一个很老的问题,但是根据关于使用 xml 进行 alpha 更改的问题,我看不到正确的答案。
为此,您需要创建已在问题中显示的选择器,它是:

<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% alpha,那么您所要做的就是创建相应的名为 press_button_background.xml 的 xml-drawable(在可绘制文件夹中,没有 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" />

这同样适用于禁用状态,我猜唯一的区别是这个状态的 alpha 级别可能是 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>
于 2017-07-25T07:13:19.993 回答
-1

你将不得不在你的代码中加入一些东西。

XML

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

爪哇

public void dialogClicked(final View view)
{
   ... set the alpha programatically ...
}
于 2013-04-10T12:48:09.953 回答
-1

This will pretty much do it. Well, it worked for me

<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>
于 2014-11-21T00:50:54.940 回答