android:用LayerDrawable叠加显示选中效果图片

2016年04月07日 Android 3条评论 阅读2398次

用LayerDrawable叠加显示选中效果图片


一般移动应用中,遇到图标类的东西,我们的设计师一般会有两个图片资源给我们,一个通常状态下的图片,另一个是选中状态时要显示的图片。

如果遇到一个项目工程中有很多类似的这样图标,按照上面的通常设计,图片文件数要乘以2,将会有很多的图片存在,增加了APP的体积,也增加了美工同事的工作量。

这篇文章要说的是一个通用的设置选中状态图片的方法。

首先,需要需要美工把选中状态的样子的png保存出来(一般是一个外方框或外切圆形的样子)
再就是通常状态下要显示的图片了。


下面是一个按钮(Button)被选中时设置为选中状态的代码

用LayerDrawable叠加显示选中效果图片的代码


Drawable normal = context.getResources().getDrawable(R.drawable.ic_btn_normal);
Drawable checked = context.getResources().getDrawable(R.drawable.ic_btn_checked);
// 生成LayerDrawable层
Drawable[] layers = { normal, checked };
LayerDrawable layerDrawable = new LayerDrawable(layers);
button.setBackground(layerDrawable);


LayerDrawable类的SDK说明

用到了LayerDrawable这个类,看这个类是如何声明的。


/** 
 * A Drawable that manages an array of other Drawables. These are drawn in array
 * order, so the element with the largest index will be drawn on top.
 * <p>
 * It can be defined in an XML file with the <code>&lt;layer-list></code> element.
 * Each Drawable in the layer is defined in a nested <code>&lt;item></code>. For more
 * information, see the guide to <a
 * href="{@docRoot}guide/topics/resources/drawable-resource.html">Drawable Resources</a>.</p>
 *
 * @attr ref android.R.styleable#LayerDrawableItem_left
 * @attr ref android.R.styleable#LayerDrawableItem_top
 * @attr ref android.R.styleable#LayerDrawableItem_right
 * @attr ref android.R.styleable#LayerDrawableItem_bottom
 * @attr ref android.R.styleable#LayerDrawableItem_drawable
 * @attr ref android.R.styleable#LayerDrawableItem_id
*/
public class LayerDrawable extends Drawable implements Drawable.Callback

我们用到了下面这个构造方法


/**
 * Create a new layer drawable with the list of specified layers.
 *
 * @param layers A list of drawables to use as layers in this new drawable.
 */
public LayerDrawable(Drawable[] layers) {
    this(layers, null);
}

用LayerDrawable叠加显示选中效果图片的使用局限性:


用LayerDrawable叠加显示选中效果图片显然是很方便的,但使用的局限性也是存在的。
如果一个按钮等UI控件是类似开关类型的,也就是点一下就是打开状态(上文说的选中状态),再点一下表示关闭状态(上文说的通常状态)。
这样的场景下,用起来还是很方便的,但如果仅仅是表示按下时的状态,本文所讲的用起来就不是太方便了,对此我们还是定义selector更好一些。



分享本文至:

WRITTEN BY

avatar
本文标签:androidLayerDrawable
看了本文是不是觉得很赞,那就赶紧点击下面按钮分享给身边的朋友吧!

3 条评论

  1. avatar 宁波ERP

    用LayerDrawable叠加显示选中效果图片,很实用的

  2. avatar 宁波ERP

    像是篇说明文,不过很仔细

欢迎留言




用户登录

sitemap