我正在实现以下addOnGlobalLayoutListener
,以便在主要活动(A)的OnCreate
部分中测量扩展视图(doodleView)。
doodleView = (DoodleView) findViewById(R.id.doodleView);
doodleView.setOnTouchListener(this);
doodleView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener()
{
@Override
public void onGlobalLayout()
{
doodleViewWidth = doodleView.getWidth();
doodleViewHeight = doodleView.getHeight();
}
});
但是,它使用以下错误语句以addOnGlobalLayoutListener
为红色下划线:
The method addOnGlobalLayoutListener(ViewTreeObserver.OnGlobalLayoutListener) in the type ViewTreeObserver is not applicable for the arguments (new OnGlobalLayoutListener(){})
我研究过网络但找不到错误的原因。会有人知道这个问题吗?非常感谢提前!
答案 0 :(得分:1)
我做的事非常相似,但后来我发现了onMeasure。因此,如果这基本上是一次性尝试做类似的事情:
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
View view = cardSlots[1];
int cardHeight = view.getMeasuredHeight();
int cardWidth = view.getMeasuredWidth();
resizeView(playedSlot, cardWidth, cardHeight);
}
static public void resizeView(View view, int cardWidth, int cardHeight) {
view.getLayoutParams().height = cardHeight;
view.getLayoutParams().width = cardWidth;
view.invalidate();
//view.requestLayout();
((View)view.getParent()).invalidate();
}
这样你就不用担心这样做了:
getViewTreeObserver().removeOnGlobalLayoutListener(this);
你可能已经忘记了。
答案 1 :(得分:0)
我遇到了同样的问题。我修改了函数
doodleView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener()
{
@Override
public void onGlobalLayout()
{
doodleViewWidth = doodleView.getWidth();
doodleViewHeight = doodleView.getHeight();
}
});
我所做的只是在ViewTreeObserver
之前添加OnGlobalLayoutListener()
班级名称。