0

我正在执行以下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(){})

我已经研究了网络,但找不到错误的原因。会有人知道问题吗?提前谢谢了!

4

2 回答 2

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);

你可能已经忘记了。

于 2013-05-01T16:44:47.493 回答
0

我有同样的问题。我将功能修改为

doodleView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() 
  {
        @Override
        public void onGlobalLayout() 
        {
            doodleViewWidth = doodleView.getWidth(); 
            doodleViewHeight = doodleView.getHeight();
        }
  });

我所做的只是ViewTreeObserver在之前添加了类名OnGlobalLayoutListener()

于 2013-11-06T12:27:28.173 回答