StateListDrawable结合LayerDrawable使用

在项目中,遇到过,甲方爸爸要求图片中圈圈的颜色跟着系统颜色改变,之前也没有做过类似的,翻找资料,好不容易做出来了。现在记下来,怕自己忘记
StateListDrawable结合LayerDrawable使用_第1张图片

radio_button_selected.xml中


    
        
            
            
            
        
    
    
        
            
        
    
    
        
            
            
            
        
    



radio_button_default.xml中


    
    

    

LayerDrawable对应的XML的根元素是layer-list,它使一种层次化显示的Drawable集合

//在代码中创建selector,创建的类型是StateListDrawable,可以通过addState()为selector添加状态
//此外,在添加state中,在state前添加“-”号,表示此state为false(例如:-android.R.attr.state_selected),否则为true。
LayerDrawable layerDrawable = (LayerDrawable)ContextCompat.getDrawable(this, R.drawable.radio_button_selected);
GradientDrawable gradientDrawable = (GradientDrawable)layerDrawable.findDrawableByLayerId(R.id.radio_button_selected);
gradientDrawable.setColor(color);

//不可以公用同一个StateListDrawable对象,否则明明不是按下态,却显示的是按下态的图片
StateListDrawable states_on = new StateListDrawable();
StateListDrawable states_off = new StateListDrawable();

states_on.addState(new int[] { android.R.attr.state_selected }, layerDrawable);
states_on.addState(new int[] { -android.R.attr.state_selected }, getDrawable(R.drawable.radio_button_default));

states_off.addState(new int[] { android.R.attr.state_selected }, layerDrawable);
states_off.addState(new int[] { -android.R.attr.state_selected }, getDrawable(R.drawable.radio_button_default));

button_on = (RadioButton)findViewById(R.id.button_on);
button_off = (RadioButton)findViewById(R.id.button_off);
button_on.setBackground(states_on);
button_off.setBackground(states_off);

你可能感兴趣的:(Android系统)