Android:使用LayerDrawable动态生成四宫格头像(包含双人、三人头像)

其实用自定义View也可以实现,我比较懒,就用LayerDrawable来创建一个新的Drawable资源实现。

举例4宫格,9宫格原理类似,每个图标的位置需要用边距慢慢调成预期的效果

效果如下:

双人头像:

 三人头像:

四人头像:

 实现:

/**
 * 使用LayerDrawable生成四宫格头像(包含双人、三人头像)
 *
 * @param drawables 头像数组
 * @return 四宫格头像
 */
private Drawable createHeaderForSms(Drawable[] drawables) {
    int size = drawables.length;
    if (size == 1) {
        return drawables[0];
    }
    int dp34 = (int) context.getResources().getDimension(R.dimen.dp_34);
    int dp24 = (int) context.getResources().getDimension(R.dimen.dp_24);
    int dp6 = (int) context.getResources().getDimension(R.dimen.dp_6);
    int dp48 = (int) context.getResources().getDimension(R.dimen.dp_48);
    
    LayerDrawable la = new LayerDrawable(drawables);
    // 其中第一个参数为层的索引号,后面的四个参数分别为left、top、right和bottom
    switch (drawables.length) {
        case 2:
            la.setLayerInset(0, 0, 0, dp34, dp34);
            la.setLayerInset(1, dp34, dp34, 0, 0);
            break;
        case 3:
            la.setLayerInset(0, dp24, dp6, dp24, dp48);
            la.setLayerInset(1, 0, dp48, dp48, dp6);
            la.setLayerInset(2, dp48, dp48, 0, dp6);
            break;
        case 4:
            la.setLayerInset(0, 0, 0, dp48, dp48);
            la.setLayerInset(1, dp48, 0, 0, dp48);
            la.setLayerInset(2, 0, dp48, dp48, 0);
            la.setLayerInset(3, dp48, dp48, 0, 0);
            break;
    }
    return la;
}

你可能感兴趣的:(android,drawable,九宫格,头像,多宫格)