반응형

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);
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기