package com.yokmama.learn10.chapter07.lesson34.utils; import android.annotation.TargetApi; import android.os.Build; import android.view.View; import android.view.ViewTreeObserver; /** * Created by kayo on 15/04/17. */ public class ViewUtils { /** * 指定したビューのサイズが計算出来たタイミングでコールバックを呼び出す * * @param v ビュー * @param callback ビューがレイアウトされた時に呼び出される */ public static <T extends View> void callOnLayout(final T v, final OnLayoutCallback<T> callback) { ViewTreeObserver.OnGlobalLayoutListener l = new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { callback.onLayout(v); removeOnGlobalLayoutListener(v.getViewTreeObserver(), this); } }; v.getViewTreeObserver().addOnGlobalLayoutListener(l); } /** * 登録したリスナーを削除する * * @param observer * @param listener */ @TargetApi(Build.VERSION_CODES.JELLY_BEAN) @SuppressWarnings("deprecation") private static void removeOnGlobalLayoutListener(ViewTreeObserver observer, ViewTreeObserver.OnGlobalLayoutListener listener) { if (observer == null) { return; } if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) { observer.removeGlobalOnLayoutListener(listener); } else { observer.removeOnGlobalLayoutListener(listener); } } /** * コールバックのためのインターフェース * @param <T> */ public interface OnLayoutCallback<T> { void onLayout(T v); } }