前言
StateListDrawable是与xml中的selector属性对应代码实现类,它需要配合GradientDrawable的使用,如果你还不了解GradientDrawable可以参考我的另一篇博客:https://www.cnblogs.com/guanxinjing/p/11142599.html
属性
<!-- 当视图具有输入焦点时设置-->
<attr name="state_focused" format="boolean" />
<!-- 当视图的窗口具有输入焦点时设置-->
<attr name="state_window_focused" format="boolean" />
<!-- 在启用视图时设置.-->
<attr name="state_enabled" format="boolean" />
<!-- 被复选选中时设置-->
<attr name="state_checkable" format="boolean"/>
<!-- 被单选选中时设置-->
<attr name="state_checked" format="boolean"/>
<!-- 被选中时设置-->
<attr name="state_selected" format="boolean" />
<!-- 当用户在视图中按下时设置-->
<attr name="state_pressed" format="boolean" />
<!-- 当视图或其父视图已“激活”时设置,这意味着用户当前已将其标记为感兴趣。
这是 state_checked 的另一种表示形式,用于将状态向下传播到视图层次结构。-->
<attr name="state_activated" format="boolean" />
<!-- 当视图或可绘制对象被其宿主视为“活动”时设置。实际使用情况可能因视图而异-->
<attr name="state_active" format="boolean" />
<!-- 当视图或可绘制对象被其宿主视为“单个”时设置。实际使用情况可能因视图而异。-->
<attr name="state_single" format="boolean" />
<!-- 当视图或可绘制对象位于有序集中的第一个位置时设置。实际使用情况可能因视图而异-->
<attr name="state_first" format="boolean" />
<!-- 当视图或可绘制对象位于有序集中的中间位置时设置。实际使用情况可能因视图而异-->
<attr name="state_middle" format="boolean" />
<!-- 当视图或可绘制对象位于有序集中的最后位置时设置。实际使用情况可能因视图而异-->
<attr name="state_last" format="boolean" />
<!-- 表示 Drawable 处于硬件加速的视图中。这意味着该设备至少可以以 60fps 的速度渲染一个全屏缩放位图,
其中包含一层文本和合成位图。设置后,即使 colorBackgroundCacheHint 指定了纯色,它也会被忽略,因为不需要优化。-->
<attr name="state_accelerated" format="boolean" />
<!-- 当指针悬停在视图上时设置-->
<attr name="state_hovered" format="boolean" />
<!-- 指示 Drawable 位于能够接受拖放操作中当前正在操作的内容的放置的视图中-->
<attr name="state_drag_can_accept" format="boolean" />
<!-- 指示拖动操作(Drawable 的视图是有效接收者)当前位于 Drawable-->
<attr name="state_drag_hovered" format="boolean" />
<!-- 表示视图具有可访问性焦点-->
<attr name="state_accessibility_focused" format="boolean" />
与ripple涟漪的配合使用
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<ripple android:color="@color/white" android:radius="1000dp">
<item android:drawable="@mipmap/launcher_ic_news" />
</ripple>
</item>
<item android:state_focused="true" android:drawable="@mipmap/launcher_ic_news"/>
<item android:drawable="@mipmap/launcher_ic_news" android:state_selected="true" />
<item android:drawable="@mipmap/launcher_ic_news"/>
</selector>
代码上实现StateListDrawable点击效果
GradientDrawable drawableRed = new GradientDrawable();
drawableRed.setShape(GradientDrawable.RECTANGLE);
drawableRed.setColor(Color.RED);
GradientDrawable drawableBlue = new GradientDrawable();
drawableBlue.setShape(GradientDrawable.RECTANGLE);
drawableBlue.setColor(Color.BLUE);
int pressed = android.R.attr.state_pressed;
StateListDrawable stateListDrawable = new StateListDrawable();
stateListDrawable.addState(new int[]{pressed}, drawableRed);
stateListDrawable.addState(new int[]{-pressed}, drawableBlue);
btn1.setBackground(stateListDrawable);
效果图:
本文来自博客园,作者:观心静 ,转载请注明原文链接:https://www.cnblogs.com/guanxinjing/p/11243902.html
本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
来源:https://www.cnblogs.com/guanxinjing/p/11243902.html |