如何从View.getDrawableState()中识别状态

Sir*_*get 2 android android-ui android-view android-resources android-drawable

我正在尝试创建一个自定义按钮,根据按钮状态(按下,启用等)更改其阴影属性(半径,距离等)

我终于接受了使用XML选择器无法完成的操作,因此我重写了View.drawableStateChanged(),并尝试使用View.getDrawableState()来确定当前状态.

但是,这个函数返回一个int [],我无法弄清楚这个值的含义,以及如何从中提取单个状态.文档是纯粹的废话:

public final int [] getDrawableState()

在API级别1中添加

返回表示视图当前状态的可绘制状态的资源ID数组.

返回当前可绘制状态

我也没能找到在线示例,与此相关的Android源代码非常神秘.

那么,你如何从这个int []中弄清楚,按钮的当前"按下"状态是什么?还是"启用状态"?

Sir*_*get 7

我只是通过反复试验来解决这个问题.

该列表包含"true"状态的资源标识符,并且不包含"false"状态的标识符.以下代码满足了我的需求:

// Get the relevant drawable state
boolean statePressed = false, stateEnabled = false;
int[] states = getDrawableState();
for (int state : states)
{
    if (state == android.R.attr.state_enabled)
        stateEnabled = true;
    else if (state == android.R.attr.state_pressed)
        statePressed = true;
}
Run Code Online (Sandbox Code Playgroud)