覆盖视图中的onMeasure方法

时间:2013-10-29 09:43:26

标签: android android-layout

我目前正在覆盖自定义视图中的onMeasure()方法,以确保它的宽度和高度相等,并且看起来除了父linearlayout似乎认为它的尺寸没有改变外,它似乎工作正常。我目前正在setMeasuredDimension()覆盖中使用onMeasure方法,以便将宽度强制为测量高度。为了让父viewgroup看到这些变化,我还需要做些什么。请注意,视图以正确的大小绘制,但父视图组现在扩展到屏幕之外(它没有看到onMeasure()覆盖中的新宽度设置。

根据要求,我已粘贴下面的onMeasure()代码:

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){
    super.onMeasure(widthMeasureSpec,heightMeasureSpec);
    int measuredHeight=getMeasuredHeight();
    setMeasuredDimension(measuredHeight,measuredHeight);

    if(measuredHeight > m_iconType.largestDimension()){
        m_iconType.largestDimension(measuredHeight);
        try {
            Class<?>clazz = Class.forName(m_iconType.iconClassName());
            Constructor<?> constructor = clazz.getConstructor(Integer.TYPE);
            m_iconType.icon((CachedBoardElement)constructor.newInstance(measuredHeight));
        } catch(Exception e){
            e.printStackTrace();
        }
    }
}

为了澄清,CachedBoardElement是一个位图缓存的矢量画布,其最大尺寸是在构造期间设置的;如果视图超过当前最大值,则必须重新创建它。

0 个答案:

没有答案