首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Trace: requestLayout()调用不正确?

Trace: requestLayout()调用不正确?
EN

Stack Overflow用户
提问于 2013-12-21 16:19:28
回答 2查看 22.7K关注 0票数 21

谁能告诉我如何修复以下跟踪:

W/View    (16810): requestLayout() improperly called by 
theme.effects.TopCenterImageView{41dc73f0 V.ED.... ........ 
0,0-480,690 #7f060066 app:id/normal_image} during second 
layout pass: posting in next frame

以下是TopCenterImageView的代码:

public class TopCenterImageView extends ImageView {

public TopCenterImageView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    setScaleType(ScaleType.MATRIX);
}

public TopCenterImageView(Context context, AttributeSet attrs) {
    super(context, attrs);
    setScaleType(ScaleType.MATRIX);
}

public TopCenterImageView(Context context) {
    super(context);
    setScaleType(ScaleType.MATRIX);
}

@Override
protected boolean setFrame(int l, int t, int r, int b) {
    if (getDrawable() == null) {
        return super.setFrame(l, t, r, b);
    }
    Matrix matrix = getImageMatrix();
    float scaleFactor = getWidth() / (float) getDrawable().getIntrinsicWidth();
    matrix.setScale(scaleFactor, scaleFactor, 0, 0);
    setImageMatrix(matrix);
    return super.setFrame(l, t, r, b);
}

}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-12 18:17:02

正如here所见,setScaleType将调用requestLayout,但ImageView的构造函数之前已经调用过它。因此,它将导致布局调用多个requestLayout,其中一个是在布局传递期间调用的。这只是一个警告,因为在小范围内,这不是问题。

你会在this线程中找到一些很好的研究(虽然不是机器人部分)。

票数 16
EN

Stack Overflow用户

发布于 2014-11-08 00:45:19

在调用super.onLayout()之后,我在onLayout方法中更改了一个子视图布局参数,这导致了一个递归:

子布局参数已更改->父视图onRequestLayout() ->父视图onLayout ->子视图参数已更改-> ...

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20717022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档