public class RelativeLayoutEx extends RelativeLayout {
private CONTROL_DEFINE m_Define;
 
 int m_vGravity;
 int m_hGravity;
 
 ImageView m_Icon;
 TextView m_Text;
 
 Bitmap m_Image;
 
 
 public final static int CTRLSTATE_NORMAL = 1;
 public final static int CTRLSTATE_TOUCH = 2;
 public final static int CTRLSTATE_ACTIVE = 3;
 public final static int CTRLSTATE_DIM = 4;
 
 int m_usActionState;
 
 public void recycle()
 {
  m_Define = null;
  if(m_Icon.getBackground() != null)
  {
   ((BitmapDrawable)m_Icon.getBackground()).getBitmap().recycle();
   m_Icon.getBackground().setCallback(null);
  }
  
  if(getBackground() != null)
  {
   ((BitmapDrawable)getBackground()).getBitmap().recycle();
   getBackground().setCallback(null);
  }
 }
 private void BitmapRecycle()
 {
  if(m_Icon.getBackground() != null)
  {
   ((BitmapDrawable)m_Icon.getBackground()).getBitmap().recycle();
   m_Icon.getBackground().setCallback(null);
  }
  
  if(getBackground() != null)
  {
   ((BitmapDrawable)getBackground()).getBitmap().recycle();
   getBackground().setCallback(null);
  }
 }
 
 public RelativeLayoutEx(Context context, AttributeSet attrs, int defStyle) {
  super(context, attrs, defStyle);
  // TODO Auto-generated constructor stub
  init();
 }
 public RelativeLayoutEx(Context context, AttributeSet attrs) {
  super(context, attrs);
  // TODO Auto-generated constructor stub
  init();
 }
 public RelativeLayoutEx(Context context) {
  super(context);
  // TODO Auto-generated constructor stub
  init();
 }
 
 private void init()
 {
  m_usActionState = CTRLSTATE_NORMAL;
  
  m_Icon = new ImageView(getContext());
  addView(m_Icon);
  m_Text = new TextView(getContext());
  addView(m_Text);
  
  String tag = getTag().toString();
  
  m_Define = new CONTROL_DEFINE();
  
  m_Define.Parsing(tag);
  

  
  SetDisplay(m_Define.TYPE_N);
  
  
 }
 
 private void SetDisplay(CONTROL_TYPE_DEFINE Type)
 {
  if((Type.ALIGN & CONTROL_DEFINE.DT_BOTTOM) != 0)
   m_vGravity = Gravity.BOTTOM;
  else if((Type.ALIGN & CONTROL_DEFINE.DT_VCENTER) != 0)
   m_vGravity = Gravity.CENTER_VERTICAL;
  else
   m_vGravity = Gravity.TOP;
  if((Type.ALIGN & CONTROL_DEFINE.DT_RIGHT) != 0)
   m_hGravity = Gravity.RIGHT;
  else if((Type.ALIGN & CONTROL_DEFINE.DT_CENTER) != 0)
   m_hGravity = Gravity.CENTER_HORIZONTAL;
  else
   m_hGravity = Gravity.LEFT;
  
  setGravity(m_vGravity|m_hGravity);
  int paddingLeft = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, Type.TEXT_X, getContext().getResources().getDisplayMetrics());
  int paddingTop = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, Type.TEXT_Y, getContext().getResources().getDisplayMetrics());
  ((MarginLayoutParams)m_Text.getLayoutParams()).leftMargin = paddingLeft;
  ((MarginLayoutParams)m_Text.getLayoutParams()).topMargin = paddingTop;
  m_Text.setTextColor(Color.argb(255, Type.R, Type.G, Type.B));
  m_Text.setTextSize(Type.SIZE);
  
  
  if(Type.equals(m_Define.TYPE_T))
  {
   BitmapRecycle();
   setBackgroundDrawable(ResourceLoader.getInstance().GetDrawableImage(Type.RSC));
   
   if((m_Define.KIND_ATTR1 & CONTROL_DEFINE.RSC_ICON1_TOUCH) != 0)
   {
    Drawable m_ICON1 = ResourceLoader.getInstance().GetDrawableImage(m_Define.ICON1.ICON);
    int icon_x = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, m_Define.ICON1.ICON_X, getContext().getResources().getDisplayMetrics());
    int icon_y = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, m_Define.ICON1.ICON_Y, getContext().getResources().getDisplayMetrics());
    if(m_ICON1 != null)
    {
     ((MarginLayoutParams)m_Icon.getLayoutParams()).leftMargin = icon_x;
     ((MarginLayoutParams)m_Icon.getLayoutParams()).topMargin = icon_y;
     m_Icon.getLayoutParams().width = (int)(m_ICON1.getIntrinsicWidth()*1.5);
     m_Icon.getLayoutParams().height = (int)(m_ICON1.getIntrinsicHeight()*1.5);
    }
    m_Icon.setBackgroundDrawable(m_ICON1);
   }
   if((m_Define.KIND_ATTR1 & CONTROL_DEFINE.RSC_ICON2_TOUCH) != 0)
   {
    Drawable m_ICON2 = ResourceLoader.getInstance().GetDrawableImage(m_Define.ICON2.ICON);
    int icon_x = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, m_Define.ICON2.ICON_X, getContext().getResources().getDisplayMetrics());
    int icon_y = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, m_Define.ICON2.ICON_Y, getContext().getResources().getDisplayMetrics());
    if(m_ICON2 != null)
    {
     ((MarginLayoutParams)m_Icon.getLayoutParams()).leftMargin = icon_x;
     ((MarginLayoutParams)m_Icon.getLayoutParams()).topMargin = icon_y;
     m_Icon.getLayoutParams().width = (int)(m_ICON2.getIntrinsicWidth()*1.5);
     m_Icon.getLayoutParams().height = (int)(m_ICON2.getIntrinsicHeight()*1.5);
    }
    m_Icon.setBackgroundDrawable(m_ICON2);
   }
  }
  else if(Type.equals(m_Define.TYPE_C))
  {
   BitmapRecycle();
   setBackgroundDrawable(ResourceLoader.getInstance().GetDrawableImage(Type.RSC));
   
   if((m_Define.KIND_ATTR1 & CONTROL_DEFINE.RSC_ICON1_ACTIVE) != 0)
   {
    Drawable m_ICON1 = ResourceLoader.getInstance().GetDrawableImage(m_Define.ICON1.ICON);
    int icon_x = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, m_Define.ICON1.ICON_X, getContext().getResources().getDisplayMetrics());
    int icon_y = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, m_Define.ICON1.ICON_Y, getContext().getResources().getDisplayMetrics());
    if(m_ICON1 != null)
    {
     ((MarginLayoutParams)m_Icon.getLayoutParams()).leftMargin = icon_x;
     ((MarginLayoutParams)m_Icon.getLayoutParams()).topMargin = icon_y;
     m_Icon.getLayoutParams().width = (int)(m_ICON1.getIntrinsicWidth()*1.5);
     m_Icon.getLayoutParams().height = (int)(m_ICON1.getIntrinsicHeight()*1.5);
    }
    m_Icon.setBackgroundDrawable(m_ICON1);
   }
   if((m_Define.KIND_ATTR1 & CONTROL_DEFINE.RSC_ICON2_ACTIVE) != 0)
   {
    Drawable m_ICON2 = ResourceLoader.getInstance().GetDrawableImage(m_Define.ICON2.ICON);
    int icon_x = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, m_Define.ICON2.ICON_X, getContext().getResources().getDisplayMetrics());
    int icon_y = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, m_Define.ICON2.ICON_Y, getContext().getResources().getDisplayMetrics());
    if(m_ICON2 != null)
    {
     ((MarginLayoutParams)m_Icon.getLayoutParams()).leftMargin = icon_x;
     ((MarginLayoutParams)m_Icon.getLayoutParams()).topMargin = icon_y;
     m_Icon.getLayoutParams().width = (int)(m_ICON2.getIntrinsicWidth()*1.5);
     m_Icon.getLayoutParams().height = (int)(m_ICON2.getIntrinsicHeight()*1.5);
    }
    m_Icon.setBackgroundDrawable(m_ICON2);
   }
  }
  else if(Type.equals(m_Define.TYPE_D))
  {
   BitmapRecycle();
   setBackgroundDrawable(ResourceLoader.getInstance().GetDrawableImage(Type.RSC));
   
   if((m_Define.KIND_ATTR1 & CONTROL_DEFINE.RSC_ICON1_DIM) != 0)
   {
    Drawable m_ICON1 = ResourceLoader.getInstance().GetDrawableImage(m_Define.ICON1.ICON);
    int icon_x = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, m_Define.ICON1.ICON_X, getContext().getResources().getDisplayMetrics());
    int icon_y = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, m_Define.ICON1.ICON_Y, getContext().getResources().getDisplayMetrics());
    if(m_ICON1 != null)
    {
     ((MarginLayoutParams)m_Icon.getLayoutParams()).leftMargin = icon_x;
     ((MarginLayoutParams)m_Icon.getLayoutParams()).topMargin = icon_y;
     m_Icon.getLayoutParams().width = (int)(m_ICON1.getIntrinsicWidth()*1.5);
     m_Icon.getLayoutParams().height = (int)(m_ICON1.getIntrinsicHeight()*1.5);
    }
    m_Icon.setBackgroundDrawable(m_ICON1);
   }
   if((m_Define.KIND_ATTR1 & CONTROL_DEFINE.RSC_ICON2_DIM) != 0)
   {
    Drawable m_ICON2 = ResourceLoader.getInstance().GetDrawableImage(m_Define.ICON2.ICON);
    int icon_x = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, m_Define.ICON2.ICON_X, getContext().getResources().getDisplayMetrics());
    int icon_y = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, m_Define.ICON2.ICON_Y, getContext().getResources().getDisplayMetrics());
    if(m_ICON2 != null)
    {
     ((MarginLayoutParams)m_Icon.getLayoutParams()).leftMargin = icon_x;
     ((MarginLayoutParams)m_Icon.getLayoutParams()).topMargin = icon_y;
     m_Icon.getLayoutParams().width = (int)(m_ICON2.getIntrinsicWidth()*1.5);
     m_Icon.getLayoutParams().height = (int)(m_ICON2.getIntrinsicHeight()*1.5);
    }
    m_Icon.setBackgroundDrawable(m_ICON2);
   }
  }
  else 
  {
   BitmapRecycle();
   setBackgroundDrawable(ResourceLoader.getInstance().GetDrawableImage(Type.RSC));
   
   if((m_Define.KIND_ATTR1 & CONTROL_DEFINE.RSC_ICON1_NORMAL) != 0)
   {
    Drawable m_ICON1 = ResourceLoader.getInstance().GetDrawableImage(m_Define.ICON1.ICON);
    int icon_x = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, m_Define.ICON1.ICON_X, getContext().getResources().getDisplayMetrics());
    int icon_y = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, m_Define.ICON1.ICON_Y, getContext().getResources().getDisplayMetrics());
    if(m_ICON1 != null)
    {
     m_Icon.getLayoutParams().width = (int)(m_ICON1.getIntrinsicWidth()*1.5);
     m_Icon.getLayoutParams().height = (int)(m_ICON1.getIntrinsicHeight()*1.5);
     ((MarginLayoutParams)m_Icon.getLayoutParams()).leftMargin = icon_x;
     ((MarginLayoutParams)m_Icon.getLayoutParams()).topMargin = icon_y;
    }
    m_Icon.setBackgroundDrawable(m_ICON1);
    
   }
   if((m_Define.KIND_ATTR1 & CONTROL_DEFINE.RSC_ICON2_NORMAL) != 0)
   {
    Drawable m_ICON2 = ResourceLoader.getInstance().GetDrawableImage(m_Define.ICON2.ICON);
    int icon_x = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, m_Define.ICON2.ICON_X, getContext().getResources().getDisplayMetrics());
    int icon_y = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, m_Define.ICON2.ICON_Y, getContext().getResources().getDisplayMetrics());
    if(m_ICON2 != null)
    {
     ((MarginLayoutParams)m_Icon.getLayoutParams()).leftMargin = icon_x;
     ((MarginLayoutParams)m_Icon.getLayoutParams()).topMargin = icon_y;
     m_Icon.getLayoutParams().width = (int)(m_ICON2.getIntrinsicWidth()*1.5);
     m_Icon.getLayoutParams().height = (int)(m_ICON2.getIntrinsicHeight()*1.5);
    }
    m_Icon.setBackgroundDrawable(m_ICON2);
   }
  }
  
  if(m_Image != null)
   setBackgroundDrawable(new BitmapDrawable(m_Image));
 }


 

대충 위와 같은 커스텀 레이아웃이 있습니다.

 

RelativeLayout을 상속 받았고, SetGravity로 내부 뷰들의 위치를 지정해주려고 하는데,

 

레이아웃의 속성은 변경되나 화면에 보여지는 View 들이 제 위치를 못찾아가고 있습니다.

 

Vertical 속성은 어느정도 움직여주는듯 하나, Horizontal 속성이 전혀 반영되고 있지 않습니다.

 

밖에서 따로 처리해주는 부분은 없고, 저 상태로만 그려지는건데 제가 혹 잘못 넣은 부분이라도 있는걸까요??

 

고수님들의 답변을 기다리겠습니다.