안드로이드 개발 질문/답변
(글 수 45,052)
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 속성이 전혀 반영되고 있지 않습니다.
밖에서 따로 처리해주는 부분은 없고, 저 상태로만 그려지는건데 제가 혹 잘못 넣은 부분이라도 있는걸까요??
고수님들의 답변을 기다리겠습니다.