src/main/java/com/android/volley/toolbox/NetworkImageView.java
void loadImageIfNecessary(final boolean isInLayoutPass) {
        int width = getWidth();
        int height = getHeight();
        ScaleType scaleType = getScaleType();

        boolean wrapWidth = false, wrapHeight = false;
        if (getLayoutParams() != null) {
            wrapWidth = getLayoutParams().width == LayoutParams.WRAP_CONTENT;
            wrapHeight = getLayoutParams().height == LayoutParams.WRAP_CONTENT;
        }

        // if the view's bounds aren't known yet, and this is not a wrap-content/wrap-content
        // view, hold off on loading the image.
        boolean isFullyWrapContent = wrapWidth && wrapHeight;
        if (width == 0 && height == 0 && !isFullyWrapContent) {
            return;
        }

        // if the URL to be loaded in this view is empty, cancel any old requests and clear the
        // currently loaded image.
        if (TextUtils.isEmpty(mUrl)) {
            if (mImageContainer != null) {
                mImageContainer.cancelRequest();
                mImageContainer = null;
            }
            setDefaultImageOrNull();
            return;
        }

        // if there was an old request in this view, check if it needs to be canceled.
        if (mImageContainer != null && mImageContainer.getRequestUrl() != null) {
            if (mImageContainer.getRequestUrl().equals(mUrl)) {
                // if the request is from the same URL, return.
                return;
            } else {
                // if there is a pre-existing request, cancel it if it's fetching a different URL.
                mImageContainer.cancelRequest();
                setDefaultImageOrNull();
            }
        }

        // Calculate the max image width / height to use while ignoring WRAP_CONTENT dimens.
        int maxWidth = wrapWidth ? 0 : width;
        int maxHeight = wrapHeight ? 0 : height;

        // The pre-existing content of this view didn't match the current URL. Load the new image
        // from the network.

        // update the ImageContainer to be the new bitmap container.
        mImageContainer =
                mImageLoader.get(
                        mUrl,
                        new ImageListener() {
                            @Override
                            public void onErrorResponse(VolleyError error) {
                                if (mErrorImageId != 0) {
                                    setImageResource(mErrorImageId);
                                } else if (mErrorImageDrawable != null) {
                                    setImageDrawable(mErrorImageDrawable);
                                } else if (mErrorImageBitmap != null) {
                                    setImageBitmap(mErrorImageBitmap);
                                }
                            }

                            @Override
                            public void onResponse(
                                    final ImageContainer response, boolean isImmediate) {
                                // If this was an immediate response that was delivered inside of a
                                // layout
                                // pass do not set the image immediately as it will trigger a
                                // requestLayout
                                // inside of a layout. Instead, defer setting the image by posting
                                // back to
                                // the main thread.
                                if (isImmediate && isInLayoutPass) {
                                    post(
                                            new Runnable() {
                                                @Override
                                                public void run() {
                                                    onResponse(response, /* isImmediate= */ false);
                                                }
                                            });
                                    return;
                                }

                                if (response.getBitmap() != null) {
                                    setImageBitmap(response.getBitmap());
                                } else if (mDefaultImageId != 0) {
                                    setImageResource(mDefaultImageId);
                                } else if (mDefaultImageDrawable != null) {
                                    setImageDrawable(mDefaultImageDrawable);
                                } else if (mDefaultImageBitmap != null) {
                                    setImageBitmap(mDefaultImageBitmap);
                                }
                            }
                        },
                        maxWidth,
                        maxHeight,
                        scaleType);
    }
/**
     * Loads the image for the view if it isn't already loaded.
     *
     * @param isInLayoutPass True if this was invoked from a layout pass, false otherwise.
     */
Loads the image for the view if it isn't already loaded.
@param isInLayoutPass True if this was invoked from a layout pass, false otherwise.
Loads the image for the view if it isn ' t already loaded . @param isInLayoutPass True if this was invoked from a layout pass false otherwise .
void loadImageIfNecessary(final boolean isInLayoutPass) {
        int width = getWidth();
        int height = getHeight();
        ScaleType scaleType = getScaleType();
        boolean wrapWidth = false, wrapHeight = false;
        if (getLayoutParams() != null) {
            wrapWidth = getLayoutParams().width == LayoutParams.WRAP_CONTENT;
            wrapHeight = getLayoutParams().height == LayoutParams.WRAP_CONTENT;
        }
        boolean isFullyWrapContent = wrapWidth && wrapHeight;
        if (width == 0 && height == 0 && !isFullyWrapContent) {
            return;
        }
        if (TextUtils.isEmpty(mUrl)) {
            if (mImageContainer != null) {
                mImageContainer.cancelRequest();
                mImageContainer = null;
            }
            setDefaultImageOrNull();
            return;
        }
        if (mImageContainer != null && mImageContainer.getRequestUrl() != null) {
            if (mImageContainer.getRequestUrl().equals(mUrl)) {
                return;
            } else {
                mImageContainer.cancelRequest();
                setDefaultImageOrNull();
            }
        }
        int maxWidth = wrapWidth ? 0 : width;
        int maxHeight = wrapHeight ? 0 : height;
        mImageContainer =
                mImageLoader.get(
                        mUrl,
                        new ImageListener() {
                            @Override
                            public void onErrorResponse(VolleyError error) {
                                if (mErrorImageId != 0) {
                                    setImageResource(mErrorImageId);
                                } else if (mErrorImageDrawable != null) {
                                    setImageDrawable(mErrorImageDrawable);
                                } else if (mErrorImageBitmap != null) {
                                    setImageBitmap(mErrorImageBitmap);
                                }
                            }
                            @Override
                            public void onResponse(
                                    final ImageContainer response, boolean isImmediate) {
                                if (isImmediate && isInLayoutPass) {
                                    post(
                                            new Runnable() {
                                                @Override
                                                public void run() {
                                                    onResponse(response, /* isImmediate= */ false);
                                                }
                                            });
                                    return;
                                }
                                if (response.getBitmap() != null) {
                                    setImageBitmap(response.getBitmap());
                                } else if (mDefaultImageId != 0) {
                                    setImageResource(mDefaultImageId);
                                } else if (mDefaultImageDrawable != null) {
                                    setImageDrawable(mDefaultImageDrawable);
                                } else if (mDefaultImageBitmap != null) {
                                    setImageBitmap(mDefaultImageBitmap);
                                }
                            }
                        },
                        maxWidth,
                        maxHeight,
                        scaleType);
    }
void loadImageIfNecessary ( final boolean isInLayoutPass ) { int width = getWidth ( ) ; int height = getHeight ( ) ; ScaleType scaleType = getScaleType ( ) ; boolean wrapWidth = false , wrapHeight = false ; if ( getLayoutParams ( ) != null ) { wrapWidth = getLayoutParams ( ) . width == LayoutParams . WRAP_CONTENT ; wrapHeight = getLayoutParams ( ) . height == LayoutParams . WRAP_CONTENT ; } boolean isFullyWrapContent = wrapWidth && wrapHeight ; if ( width == 0 && height == 0 && ! isFullyWrapContent ) { return ; } if ( TextUtils . isEmpty ( mUrl ) ) { if ( mImageContainer != null ) { mImageContainer . cancelRequest ( ) ; mImageContainer = null ; } setDefaultImageOrNull ( ) ; return ; } if ( mImageContainer != null && mImageContainer . getRequestUrl ( ) != null ) { if ( mImageContainer . getRequestUrl ( ) . equals ( mUrl ) ) { return ; } else { mImageContainer . cancelRequest ( ) ; setDefaultImageOrNull ( ) ; } } int maxWidth = wrapWidth ? 0 : width ; int maxHeight = wrapHeight ? 0 : height ; mImageContainer = mImageLoader . get ( mUrl , new ImageListener ( ) { @ Override public void onErrorResponse ( VolleyError error ) { if ( mErrorImageId != 0 ) { setImageResource ( mErrorImageId ) ; } else if ( mErrorImageDrawable != null ) { setImageDrawable ( mErrorImageDrawable ) ; } else if ( mErrorImageBitmap != null ) { setImageBitmap ( mErrorImageBitmap ) ; } } @ Override public void onResponse ( final ImageContainer response , boolean isImmediate ) { if ( isImmediate && isInLayoutPass ) { post ( new Runnable ( ) { @ Override public void run ( ) { onResponse ( response , /* isImmediate= */ false ) ; } } ) ; return ; } if ( response . getBitmap ( ) != null ) { setImageBitmap ( response . getBitmap ( ) ) ; } else if ( mDefaultImageId != 0 ) { setImageResource ( mDefaultImageId ) ; } else if ( mDefaultImageDrawable != null ) { setImageDrawable ( mDefaultImageDrawable ) ; } else if ( mDefaultImageBitmap != null ) { setImageBitmap ( mDefaultImageBitmap ) ; } } } , maxWidth , maxHeight , scaleType ) ; }
Loads the image for the view if it isn't already loaded.
Loads the image for the view if it isn ' t already loaded .
// if the view's bounds aren't known yet, and this is not a wrap-content/wrap-content // view, hold off on loading the image. // if the URL to be loaded in this view is empty, cancel any old requests and clear the // currently loaded image. // if there was an old request in this view, check if it needs to be canceled. // if the request is from the same URL, return. // if there is a pre-existing request, cancel it if it's fetching a different URL. // Calculate the max image width / height to use while ignoring WRAP_CONTENT dimens. // The pre-existing content of this view didn't match the current URL. Load the new image // from the network. // update the ImageContainer to be the new bitmap container. // If this was an immediate response that was delivered inside of a // layout // pass do not set the image immediately as it will trigger a // requestLayout // inside of a layout. Instead, defer setting the image by posting // back to // the main thread.