DrawableState存储着控件enabled,pressed,checked等状态,绘制时根据这些状态绘制出不同的图像 我们可以通过修改DrawableState来给控件添加一些本来没有的属性,比如ImageView本来是没有checked属性的 DrawableState的基础属性是不可修改的,但是我们可以指定新的属性和基础属性合并,调用getDrawableState时,就会返回合并后的DrawableState ImageView主要是通过setImageState(int[] extraStates, boolean merge)这个方法来合并属性
ImageView iv = findViewById(R.id.iv);
iv.setImageState(new int[]{android.R.attr.state_checked, android.R.attr.state_pressed}, true);
iv.setImageState(new int[]{android.R.attr.state_checked, android.R.attr.state_pressed}, false);
iv.setImageState(new int[]{}, true);
iv.setImageState(new int[]{}, false);
ImageView继承自View,基础State属性只有enabled一个 baseStates = {android.R.attr.state_enabled} 我们新添加checked和pressed两个属性 extraStates = {android.R.attr.state_checked, android.R.attr.state_pressed} setImageState的第一个参数表示追加属性,第二个参数表示是否和基类属性合并,不合并只会使用自己指定的属性 那么以上四个方法的执行结果如下:
{android.R.attr.state_enabled, android.R.attr.state_checked, android.R.attr.state_pressed}
{android.R.attr.state_checked, android.R.attr.state_pressed}
{android.R.attr.state_enabled}
{}