View v = viewgroup.findViewById(R.id.gradient);
v.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
LayerDrawable mLD = (LayerDrawable)v.getBackground();
mLD.setLayerInset(1, 0, v.getHeight() / 2, 0, 0);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
v.getViewTreeObserver().removeGlobalOnLayoutListener(this);
} else {
v.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
}
});
在此代码中,viewgroup是一个relativelayout。它包含一个视图v。我在视图上应用了一个渐变。 Gradient有2件商品。所以我需要获得视图的高度并相应地放置项目。 v.getHeight()
没有给出正确的结果。在此代码中,onGlobalLayout()
仅在我删除侦听器时被调用一次。
如果我评论是否还有部分代码,onGlobalLayout()
被多次调用。在那种情况下,我第二次获得v.getHeight()
的正确结果。
所以任何人都知道为什么我第一次使用onGlobalLayout()
方法调用时没有获得正确的值?
答案 0 :(得分:0)
而不是OnGlobalLayout()
,只需使用View.post()
即可。在你的情况下像:
//The view from which the height is required
View requiredView = findViewById(R.id.your_view);
//This will be added in the runnable Queue
requiredView.post(new Runnable() {
@Override
public void Run() {
LayerDrawable mLD = (LayerDrawable) requiredView.getBackground();
mLD.setLayerInset(1, 0, requiredView.getHeight() / 2, 0, 0);
}
});