Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android: Setting padding in a overlay image background

I'm trying to create a dynamic icon menu for my android application. The icon is made from 2 drawable, a 9-patch background image with the icon image overlay on it.

With reference to overlay two images in android to set an imageview, I've the following code which have the overlay nicely.

        Resources res = parent.getResources();
        Drawable icon_bg = res.getDrawable(R.drawable.menu_icon_bg);
        Drawable icon = res.getDrawable(R.drawable.menu_icon);

        // Not working
        int int_icon_height = icon.getIntrinsicHeight();
        int int_icon_width = icon.getIntrinsicWidth();
        Rect rect_icon_bg_bound = new Rect();
        rect_icon_bg_bound.left = 0;//(int) Math.round(int_icon_width*-1.5);
        rect_icon_bg_bound.right = (int) Math.round(int_icon_width*1.5);
        rect_icon_bg_bound.top = 0;//(int)Math.round(int_icon_height*-1.5);
        rect_icon_bg_bound.bottom = (int)Math.round(int_icon_height*1.5);
        icon_bg.setBounds(rect_icon_bg_bound);

        Drawable[] layers = new Drawable[2];
        layers[0] = icon_bg;
        layers[1] = icon;

        LayerDrawable layerDrawable = new LayerDrawable(layers);
        ImageView iv_icon_combined = new ImageView(getApplicationContext());
        iv_icon_combined.setImageDrawable(layerDrawable);

The problem I'm facing right now is adding a padding so that the icon will have some spacing within the background.

Hope to get some enlightenment here, thanks in advance.

like image 966
InSheNaiDe Avatar asked Mar 11 '11 02:03

InSheNaiDe


1 Answers

I just ran into this same issue. Take a look at the setLayerInset method on LayerDrawable. It takes the layer level as an argument and then the modifiers for the left, top, right, bottom bounds of the drawable.

like image 197
Marc Bernstein Avatar answered Nov 12 '22 10:11

Marc Bernstein