Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android點滴之ViewTreeObserver

android點滴之ViewTreeObserver

編輯:關於Android編程

一類的基本概念

這是一個注冊監聽視圖樹的觀察者(observer),在視圖樹種全局事件改變時得到通知。這個全局事件不僅還包括整個樹的布局,從繪畫過程開始,觸摸模式的改變等。最常見的用途時通過監聽獲知什麼時候,視圖的寬高值確定了,可以獲取了,以便更改UI。

二類的主要接口:監聽器

interface ViewTreeObserver.OnGlobalFocusChangeListener 當在一個視圖樹中的焦點狀態發生改變時,所要調用的回調函數的接口類
interface ViewTreeObserver.OnGlobalLayoutListener 當在一個視圖樹中全局布局發生改變或者視圖樹中的某個視圖的可視狀態發生改變時,所要調用的回調函數的接口類
interface ViewTreeObserver.OnPreDrawListener 當一個視圖樹將要繪制時,所要調用的回調函數的接口類
interface ViewTreeObserver.OnScrollChangedListener 當一個視圖樹中的一些組件發生滾動時,所要調用的回調函數的接口類
interface ViewTreeObserver.OnTouchModeChangeListener 當一個視圖樹的觸摸模式發生改變時,所要調用的回調函數的接口類

三代碼示例

1.創建監聽器
   private final ViewTreeObserver.OnGlobalLayoutListener mGlobalLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            int width = -1;
            int height = -1;
            
            try {
                width = getActivity().getWindow().getDecorView().getWidth();
                height = getActivity().getWindow().getDecorView().getHeight();
            } catch (Exception e) {
                // called too early. so, just skip.
            }
            
            if (width != -1 && mGlobalLayoutWidth != width) {//只有當尺寸真正有了數值,即已經確定了,更新UI才有意義
                mGlobalLayoutWidth = width;
                updateUI();
            } else if (height != -1 && mGlobalLayoutHeight != height) {
                mGlobalLayoutHeight = height;                
		updateUI();
 } } };


2.一般在onCreate或者onCreateView中注冊監聽器
mViewTreeObserver = getActivity().getWindow().getDecorView().getViewTreeObserver();
        mViewTreeObserver.addOnGlobalLayoutListener(mGlobalLayoutListener);


  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved