getSelector(Drawable normalDrawable,Drawable pressDrawable) { StateListDrawable stateListDrawable = new StateListDrawable(); //给当前的颜色选择器添加选中图片指向状态,未选中图片指向状态 stateListDrawable.addState (new int[]{android.R.attr.state_enabled, android.R.attr.state_pressed}, pressDrawable); stateListDrawable.addState (new int[]{android.R.attr.state_enabled}, normalDrawable); //设置默认状态 stateListDrawable.addState (new int[]{}, normalDrawable); return stateListDrawable; } } 运用 int r = random.nextInt(
-- State value for {@link android.graphics.drawable.StateListDrawable StateListDrawable}, set when a -- State value for {@link android.graphics.drawable.StateListDrawable StateListDrawable}, set when a -- State value for {@link android.graphics.drawable.StateListDrawable StateListDrawable}, set when a -- State value for {@link android.graphics.drawable.StateListDrawable StateListDrawable}, set when a -- State value for {@link android.graphics.drawable.StateListDrawable StateListDrawable}, set when a
getSelector(Drawable normalDrawable,Drawable pressDrawable) { StateListDrawable stateListDrawable = new StateListDrawable(); //给当前的颜色选择器添加选中图片指向状态,未选中图片指向状态 stateListDrawable.addState (new int[]{android.R.attr.state_enabled, android.R.attr.state_pressed}, pressDrawable); stateListDrawable.addState (new int[]{android.R.attr.state_enabled}, normalDrawable); //设置默认状态 stateListDrawable.addState (new int[]{}, normalDrawable); return stateListDrawable; } } 运用 int r = random.nextInt(
UiUtils.dip2px(5));//设置4个角的弧度 drawable.setColor(color);// 设置颜色 return drawable; } public static StateListDrawable stateListDrawable=new StateListDrawable(); stateListDrawable.addState(new int[]{android.R.attr.state_pressed }, pressedDrawable);// 按下显示的图片 stateListDrawable.addState(new int[]{}, normalDrawable);// 抬起显示的图片 return stateListDrawable; } TopFragment :使用代码创建、随机色 MATCH_PARENT 、FILL_PARENT是-1且他俩个没有任何区别,WRAP_CONTENT green, blue);//范围 0-255 GradientDrawable createShape = DrawableUtils.createShape(color); // 默认显示的图片 StateListDrawable
LayerDrawable Drawable子类之——LayoutDrawable (图层叠加) LevelListDrawable Drawable子类之——LevelListDrawable (等级列表图片) StateListDrawable Drawable子类之—— ShapeDrawable (图形定义) TransitionDrawable Drawable子类之——TransitionDrawable (渐变) StateListDrawable StatListDrawable资源作为组件的背景或者前景Drawable资源时,可以随着组件状态的变更而自动切换相对应的资源,例如,一个Button可以处于不同的状态(按钮按下、获取焦点) 我们可以使用一个StateListDrawable ,当组件的状态变更时,会自定向下遍历StateListDrawable对应的xml文件来查找第一个匹配的Item <?xml version="1.0" encoding="utf-8"?
在Android应用中,绝大部分情况下,按钮都有按下变色的效果,这种效果主要都是借助于Android里面的 StateListDrawable来实现的,它可以设置多种状态,并分别为每种状态设置相应的drawable /> <solid android:color="@color/material_dark_green" /> </shape> 其中,corners:圆角度数, solid:填充色 二、准备StateListDrawable -- 默认时的背景图片--> <item android:drawable="@drawable/btn_shape" /> </selector> 三、将StateListDrawable
窗口没有处于交互时的背景图片 --> <item android:drawable="@drawable/pic5" /> </selector> Selector最终会被Android框架解析成StateListDrawable StateListDrawable类介绍 该类定义了不同状态值下与之对应的图片资源,即我们可以利用该类保存多种状态值,多种图片资源。 public void addState (int[] stateSet, Drawable drawable) 功能: 给特定的状态集合设置drawable图片资源 //初始化一个空对象 StateListDrawable stalistDrawable = new StateListDrawable(); //获取对应的属性值 Android框架自带的属性 attr int pressed = android.R.attr.state_pressed 注:在StateListDrawable类中,该方法返回为true,显然状态改变后,我们的图片会跟着改变。
上述实现无非是通过StateListDrawable这种Drawable资源来实现,即编写一个drawable的资源文件,就说这么多, 直接开始本节内容~ 1.StateListDrawable简介 其实就是点按可切换资源 ,和RadioButton、ToggleButton所用到的资源文件一样 StateListDrawable是Drawable资源的一种,可以根据不同的状态,设置不同的图片效果,关键节点 < selector
background = BitmapUtil.addStateDrawable1(context, myGrad3, myGrad4, myGrad4, myGrad4) public static StateListDrawable Context context, Drawable idNormal, Drawable idPressed, Drawable idFocused, Drawable idUnable) { StateListDrawable bg = new StateListDrawable(); Drawable normal = idNormal; Drawable pressed = idPressed; unable); // View.EMPTY_STATE_SET bg.addState(new int[] {}, normal); return bg; } Tips: StateListDrawable 设置 View 绘制不同状态背景图片,和尚我测试中,发现需要设置点击事件或者 Pressed/Focused 状态,和尚我认为如果只是设置 StateListDrawable 默认是 normal 样式
selector介绍 StateListDrawable 是在 XML 文件中定义的可绘制对象,它会根据对象状态,使用多个不同的图像来表示同一个图形。 selector指向的是StateListDrawable,这里我们不关注StateListDrawable,只关注xml。 语法 参考如下语法: <?
android:left="40dp" android:src="@drawable/picture_2" android:gravity="center"> </item> </layer-list> StateListDrawable 该类StateListDrawable根据不同状态提供不同图片。
StateListDrawable Lets you assign a number of graphic images to a single Drawable and swap out the visible ---- StateListDrawable StateListDrawable管理一组drawable,每一个drawable都对应着一组状态,状态的选择类似于java中的switch-case组合, StateListDrawable在Android中使用的非常广泛,所有控件的背景基本上都使用了StateListDrawable,比如按钮就具有很多状态,按下状态、选中状态、默认状态、禁用状态等等,像这样在不用的状态下显示效果不一样的时候 ,就是需要使用StateListDrawable的时候。 在xml文件中使用selector作为根节点来定义StateListDrawable,并使用item定义不同状态下的drawable。 ? ? ?
Drawable的状态 简单的drawable都是静态的图形,现在我们让它动一下,根据不同的触摸情况来变更图形,这时就要用到Drawable的一个子类StateListDrawable。 StateListDrawable是在一个xml文件中定义不同状态下呈现的图像。 下面是一个例子btn_visit_selector.xml <?
: 1、values资源 string 字符串资源 color 颜色资源 dimen 尺寸资源 array 数组资源 style 样式资源 theme 主题资源 2、drawable资源 图片资源 StateListDrawable StateListDrawable资源 顾名思义,StateList就是一个state(状态)的集合。 它可以用来组织多个Drawable对象,并让使用了该StateListDrawable的组件根据自身不同的状态来自动切换至相应的Drawable。 当然,以上只是StateListDrawable所支持的其中两个状态。 完整的状态列表如下: ? LayerDrawable资源 LayerDrawable顾名思义,就表现得和图层差不多。 前面有提到StateListDrawable,它会根据不同的状态来引用不同的drawable对象。但是改变的往往是背景色,对于文字颜色就爱莫能助了。
这个提示效果类似于状态图形StateListDrawable,区别在于,StateListDrawable使用一张静止图片表示按下状态,而RippleDrawable使用荡起涟漪的水波动画表示按压动作。
Drawable分类 Drawable种类繁多,比如,BitmapDrawable,ShapeDrwable,LayerDrawable,StateListDrawable等,这里就不一一列举了,下面列出一些常用的做一下简单的介绍 <item android:maxLevel="6000" android:drawable="@drawable/level3" /> </level-list> StateListDrawable stateListDrawable管理一组drawable,每一个drawable都对应着一组状态,状态的选择类似于java中的switch-case组合,按照顺序比较状态,当遇到匹配的状态后,就返回对应的
具体可以参考这篇文章:Android Drawable - Layer Drawable使用详解 StateListDrawable ? 这个我就不多说了,可以参考这篇:Drawable子类之——StateListDrawable (选择器) 这里额外说一个注意点: 系统根据View状态从selector中按照从上到下的顺序查找选择对应item 这个有点像StateListDrawable,在不同Level下会使用不同的图,不同的是,它是根据每个item设置的Level范围来确定的。 TransitionDrawable ?
RotateDrawable, ScaleDrawable, ShapeDrawable 间接子类有 AnimationDrawable, LevelListDrawable, PaintDrawable, StateListDrawable 它的子类AnimationDrawable, LevelListDrawable, StateListDrawable GradientDrawable A Drawable
例如,一个StateListDrawable它引用其中包含的载体的其他文件。 res/drawable/state_list_icon.xml <selector xmlns:android="... state_list_icon" /> 作为一个ImageView的背景图: <ImageView android:src="@drawable/state_list_icon" /> 你不得不去用StateListDrawable
android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { Drawable contentDrawable = (stateListDrawable drawable : stateListDrawable); RippleDrawable rippleDrawable = new RippleDrawable(ColorStateList.valueOf view.setClickable(true); view.setBackground(rippleDrawable); } else { StateListDrawable tmpDrawable = new StateListDrawable(); GradientDrawable unPressDrawable = DrawableFactory.getDrawable