본문 바로가기

구글과인터넷/안드로이드

안드로이드 화면 관련 이벤트 처리(ViewTreeObserver)


java.lang.Object
   ↳android.view.ViewTreeObserver

 

Nested Classes
interfaceViewTreeObserver.OnGlobalFocusChangeListenerInterface definition for a callback to be invoked when the focus state within the view tree changes. 자식뷰들의 포커스가 변경되는 것을 알 수 있다.
interfaceViewTreeObserver.OnGlobalLayoutListenerInterface definition for a callback to be invoked when the global layout state or the visibility of views within the view tree changes. 어떤 뷰의 레이아웃이나 가시성이 변경되는 것을 알 수 있다.
interfaceViewTreeObserver.OnPreDrawListener

Interface definition for a callback to be invoked when the view tree is about to be drawn. 

화면에 그려지기 전에 특정한 작업을 할 수 있다.

interfaceViewTreeObserver.OnScrollChangedListenerInterface definition for a callback to be invoked when something in the view tree has been scrolled. 
interfaceViewTreeObserver.OnTouchModeChangeListener

Interface definition for a callback to be invoked when the touch mode changes. 

터치모드가 변경되는 것을 알 수 있다.

 

사용예)

View all = findViewById(R.id.layout_total_container);//레이아웃xml의 첫번째 레이아웃 아이디 

ViewTreeObserver vto = all.getViewTreeObserver();//옵저버 얻기

//터치모드 변경 리스너 등록

vto.addOnTouchModeChangeListener(new ViewTreeObserver.OnTouchModeChangeListener() {

     public void onTouchModeChanged(boolean isInTouchMode) {
      //To do something

     }
 });

//자식뷰의 포커스 변경 이벤트 리스너 등록

vto.addOnGlobalFocusChangeListener(new ViewTreeObserver.OnGlobalFocusChangeListener() {

     public void onGlobalFocusChanged(View oldFocus, View newFocus) {

          //oldFocus : 이전 포커싱되었던 뷰

          //newFocus : 현재 포커싱된 뷰
         if (oldFocus != null && newFocus != null)

         //To do something
     }

});

 

vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
   
   @Override
   public void onGlobalLayout() {
    // TODO Auto-generated method stub
    
   }
  });
  vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
   
   @Override
   public boolean onPreDraw() {
    // TODO Auto-generated method stub
    return false;
   }
  });
  vto.addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
   
   @Override
   public void onScrollChanged() {
    // TODO Auto-generated method stub
    
   }
  });