안드로이드 개발 질문/답변
(글 수 45,052)
import android.content.Context; import android.graphics.Color; import android.view.View; import android.view.ViewGroup; import android.view.animation.AnimationUtils; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; public class SlideMenu extends RelativeLayout{ private Context context; private final float DPSCALE = getResources().getDisplayMetrics().density; private final int DISPLAY_WIDTH = getResources().getDisplayMetrics().widthPixels; private final int DISPLAY_HEIGHT = getResources().getDisplayMetrics().heightPixels; private LinearLayout menu; public SlideMenu(Context context) { super(context); this.context = context; makeLayout(); // Animation ani = AnimationUtils.loadAnimation(context, R.anim.menu_start); setMargin(); } private void setMargin(){ menu.setLayoutParams(new LayoutParams((int)(250*DPSCALE), (int)(300*DPSCALE))); ViewGroup.MarginLayoutParams margin = new ViewGroup.MarginLayoutParams(menu.getLayoutParams()); margin.setMargins((int)(35*DPSCALE), DISPLAY_HEIGHT-(int)(100*DPSCALE), 0, 0); menu.setLayoutParams(new RelativeLayout.LayoutParams(margin)); } private void makeLayout(){ this.setLayoutParams(new LayoutParams(DISPLAY_WIDTH, 0)); this.addView(menu = new LinearLayout(context)); menu.setBackgroundColor(Color.RED); menu.setOnClickListener( new OnClickListener() { @Override public void onClick(View v) { startAnimation(AnimationUtils.loadAnimation(context, R.anim.menu_up)); } } ); TextView tv1 = new TextView(context); tv1.setText("헤드헤드"); tv1.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT)); tv1.setBackgroundColor(Color.BLUE); menu.addView(tv1); } }
DPSCALE을 dip를 구해서 픽셀 값에 곱해서 dp로 구현하기 위한 상수입니다.
DISPLAY_HEIGHT는 현재 폰의 세로 픽셀 값이구요
menu 는 메뉴를 구성할 LinearLayout입니다.
300dp짜리 menu 을 밑에 숨겨놨다가 살짝 올라온 헤더 부분을 클릭하면
트윈애니메이션으로 위로 올라오게 하려는 슬라이드 메뉴를 만들려고하는데요
화면 범위안에 있을대는 괜찮은데 아래 그림과 같이 마진을 줘서 화면 범위 밖으로 빠져나가서
자리를 잡게 되면 화면밖으로 빠져 나가는 부분이 잘려나가서 안보이게 되네요
대체 왜 이런걸까요 ㅠㅠ?
AbsoluteLayout으로 하면 괜찮은거 같은데 현재 구글에서 사용하지 말라고해서 realativelayout에
마진으로 구현할려는데 힘드네요 .;
<화면 밖으로 배치한 경우 짤림>

<화면 안에 배치할 경우 정상>
