demo上传至github
1. 动态获取view的大小:
public static void addMeasureListener(final View view, final MeasureListener measureListener) {
ObjectHelper.requireNotNull(view, "the current view is null");
view.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
@Override
public void onGlobalLayout() {
if (measureListener != null) {
view.getViewTreeObserver().removeOnGlobalLayoutListener(this);
int[] size = new int[2];
size[0] = view.getMeasuredWidth();
size[1] = view.getMeasuredHeight();
measureListener.measureView(view, size);
}
}
});
}
public interface MeasureListener {
void measureView(View view, int[] size);
}
2. 动态获取view的坐标:
@SuppressLint("NewApi")
public static void addViewLocationListener(final View view, final ViewLocationListener listener) {
ObjectHelper.requireNotNull(view, "the current view is null");
view.getViewTreeObserver().addOnWindowFocusChangeListener(new ViewTreeObserver.OnWindowFocusChangeListener() {
@Override
public void onWindowFocusChanged(boolean hasFocus) {
if (listener != null) {
view.getViewTreeObserver().removeOnWindowFocusChangeListener(this);
int[] location = new int[2];
view.getLocationOnScreen(location);
listener.viewLocation(view, location);
}
}
});
}
public interface ViewLocationListener {
void viewLocation(View view, int[] location);
}
网友评论