package org.itsnat.droid.impl.xmlinflater.drawable.classtree; import android.graphics.drawable.Drawable; import android.graphics.drawable.LayerDrawable; import org.itsnat.droid.impl.dom.drawable.DOMElemDrawable; import org.itsnat.droid.impl.xmlinflated.drawable.ElementDrawableChildBase; import org.itsnat.droid.impl.xmlinflated.drawable.ElementDrawableChildRoot; import org.itsnat.droid.impl.xmlinflated.drawable.LayerDrawableChildItem; import org.itsnat.droid.impl.xmlinflater.drawable.AttrDrawableContext; import org.itsnat.droid.impl.xmlinflater.drawable.ClassDescDrawableMgr; import org.itsnat.droid.impl.xmlinflater.drawable.XMLInflaterDrawable; import java.util.ArrayList; /** * Created by jmarranz on 10/11/14. */ public class ClassDescLayerDrawable extends ClassDescElementDrawableBased<LayerDrawable> implements ClassDescCallback { public ClassDescLayerDrawable(ClassDescDrawableMgr classMgr,ClassDescElementDrawableBased<? super LayerDrawable> parent) { super(classMgr,"layer-list",parent); } @Override public ElementDrawableChildRoot createElementDrawableChildRoot(DOMElemDrawable rootElem, AttrDrawableContext attrCtx) { // http://stackoverflow.com/questions/20120725/layerdrawable-programatically ElementDrawableChildRoot elementDrawableRoot = new ElementDrawableChildRoot(); XMLInflaterDrawable xmlInflaterDrawable = attrCtx.getXMLInflaterDrawable(); xmlInflaterDrawable.processChildElements(rootElem,elementDrawableRoot,attrCtx); ArrayList<ElementDrawableChildBase> itemList = elementDrawableRoot.getElementDrawableChildList(); Drawable[] drawableLayers = getLayerChildDrawables(itemList); LayerDrawable drawable = new LayerDrawable(drawableLayers); for(Drawable drawableLayer : drawableLayers) { setCallback(drawableLayer,drawable); } setItemAttributes(drawable,itemList); elementDrawableRoot.setDrawable(drawable); return elementDrawableRoot; } public void setItemAttributes(LayerDrawable drawable, ArrayList<ElementDrawableChildBase> itemList) { // Es llamado este método también por ClassDescTransitionDrawable for (int i = 0; i < itemList.size(); i++) { LayerDrawableChildItem item = (LayerDrawableChildItem) itemList.get(i); drawable.setId(i, item.getId()); drawable.setLayerInset(i, item.getLeft(), item.getTop(), item.getRight(), item.getBottom()); } } @Override public Class<LayerDrawable> getDrawableOrElementDrawableClass() { return LayerDrawable.class; } protected void init() { super.init(); } }