Android ImageView请求布局在';s的界限是固定的

Android ImageView请求布局在';s的界限是固定的,android,performance,android-recyclerview,android-imageview,android-glide,Android,Performance,Android Recyclerview,Android Imageview,Android Glide,因此,我在ImageView中遇到了这个设置可绘制边界的方法…在这个方法中,如果最新的可绘制边界与以前的可绘制边界不相同,那么将调用requestLayout…但是如果图像视图边界不固定,是否应该进行额外的检查(例如:80 dp x 80 dp)然后才请求布局…因为我有一个回收视图,并且正在使用Glide下载图像。。。recycler视图的requestLayout被称为特定子图像视图drawable,在Glide完成下载时设置 public void setImageDrawable(@Nul

因此,我在ImageView中遇到了这个设置可绘制边界的方法…在这个方法中,如果最新的可绘制边界与以前的可绘制边界不相同,那么将调用requestLayout…但是如果图像视图边界不固定,是否应该进行额外的检查(例如:80 dp x 80 dp)然后才请求布局…因为我有一个回收视图,并且正在使用Glide下载图像。。。recycler视图的requestLayout被称为特定子图像视图drawable,在Glide完成下载时设置

public void setImageDrawable(@Nullable Drawable drawable) {
    if (mDrawable != drawable) {
        mResource = 0;
        mUri = null;

        final int oldWidth = mDrawableWidth;
        final int oldHeight = mDrawableHeight;

        updateDrawable(drawable);

        if (oldWidth != mDrawableWidth || oldHeight != mDrawableHeight) {
            requestLayout();
        }
        invalidate();
    }
}

所以,即使我为图像视图指定了一个固定的边界(80x80),为什么图像视图在可绘制的情况下仍会请求布局发生变化呢?

什么用例?你需要更清楚你的问题是什么。如果新图像的大小与前一个图像相同,则requestLayout()不调用,因为它不需要更改。因此,由于我要求Glide在图像视图布局后下载图像…一旦完成下载,它将调用setImageDrawable,而setImageDrawable将再次调用requestLayout…如果视图被回收,则不会有任何问题,因为以前的可绘制和当前的可绘制将大小相同..但这是第一次在布局图像视图时,Glide并行下载图像..这种情况如果没有可绘制集,oldWidth和mDrawableWidth(和高度)将为零,因此它不会请求布局。如果没有初始可绘制集,mDrawableWidth和mDrawableHeight默认为-1,现在让我们假设Glide下载了图像并调用setImageDrawable…现在oldWidth,oldHeight是-1,但是newWidth,newHeight是80dp,所以很明显它会调用requestLayout…好的。。。那有什么问题吗?它在您第一次设置可绘制图形后调用requestlayout。这就是它的工作原理。什么用例?你需要更清楚你的问题是什么。如果新图像的大小与前一个图像相同,则requestLayout()不调用,因为它不需要更改。因此,由于我要求Glide在图像视图布局后下载图像…一旦完成下载,它将调用setImageDrawable,而setImageDrawable将再次调用requestLayout…如果视图被回收,则不会有任何问题,因为以前的可绘制和当前的可绘制将大小相同..但这是第一次在布局图像视图时,Glide并行下载图像..这种情况如果没有可绘制集,oldWidth和mDrawableWidth(和高度)将为零,因此它不会请求布局。如果没有初始可绘制集,mDrawableWidth和mDrawableHeight默认为-1,现在让我们假设Glide下载了图像并调用setImageDrawable…现在oldWidth,oldHeight是-1,但是newWidth,newHeight是80dp,所以很明显它会调用requestLayout…好的。。。那有什么问题吗?它在您第一次设置可绘制图形后调用requestlayout。这就是它的工作原理。