반응형

View 크기가 변할 때 진입하는 리스너 만들기

  • 가로의 크기는 지정을 해두고 해당 크기를 읽어와 세로크기에 지정해서 정사각형으로 만듦
//레이아웃 변경 리스너 선언
ViewTreeObserver.OnGlobalLayoutListener onGlobalLayoutListener;
//레이아웃 변경 리스너 생성
onGlobalLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
//레이아웃 구조
//LinearLayout linearCenter(가로는 xml에서 크기 지정, 세로는 아래에서 계산후 적용)
// └ View viewCenter(가로, 세로 match_parent)
//지정된 가로크기를 구한 다음 세로 크기를 동일하게 지정하여 정사각형 만들기
int centerWidth = viewCenter.getWidth();
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams)linearCenter.getLayoutParams();
params.height = centerWidth;
linearCenter.setLayoutParams(params);
//리스너 삭제
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
viewCenter.getViewTreeObserver().removeGlobalOnLayoutListener(onGlobalLayoutListener);
} else {
viewCenter.getViewTreeObserver().removeOnGlobalLayoutListener(onGlobalLayoutListener);
}
}
};
//레이아웃 변경 리스너 등록
viewCenter.getViewTreeObserver().addOnGlobalLayoutListener(onGlobalLayoutListener);
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기