跟踪:requestLayout()调用不正确?

Aas*_*hir 18 android stack-trace

任何人都可以告诉我如何修复以下跟踪:

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
Run Code Online (Sandbox Code Playgroud)

这是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);
}

}
Run Code Online (Sandbox Code Playgroud)

Nit*_*G42 16

正如所看到这里,setScaleType会调用requestLayout,但ImageView的的构造函数之前已经调用它.因此,它将导致布局在布局过程中调用多个requestLayout.这只是一个警告,因为在小范围内,这不是问题.

你会在这个帖子中找到一些好的研究(不过roboguice部分).