前言
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
本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。