diff options
Diffstat (limited to 'src/main/java/com/android/volley/toolbox/NetworkImageView.java')
-rw-r--r-- | src/main/java/com/android/volley/toolbox/NetworkImageView.java | 120 |
1 files changed, 62 insertions, 58 deletions
diff --git a/src/main/java/com/android/volley/toolbox/NetworkImageView.java b/src/main/java/com/android/volley/toolbox/NetworkImageView.java index 60e4815..a490a79 100644 --- a/src/main/java/com/android/volley/toolbox/NetworkImageView.java +++ b/src/main/java/com/android/volley/toolbox/NetworkImageView.java @@ -1,46 +1,37 @@ /** * Copyright (C) 2013 The Android Open Source Project * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + * <p>Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * <p>http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and + * <p>Unless required by applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing permissions and * limitations under the License. */ package com.android.volley.toolbox; import android.content.Context; +import android.support.annotation.MainThread; import android.text.TextUtils; import android.util.AttributeSet; import android.view.ViewGroup.LayoutParams; import android.widget.ImageView; - import com.android.volley.VolleyError; import com.android.volley.toolbox.ImageLoader.ImageContainer; import com.android.volley.toolbox.ImageLoader.ImageListener; -/** - * Handles fetching an image from a URL as well as the life-cycle of the - * associated request. - */ +/** Handles fetching an image from a URL as well as the life-cycle of the associated request. */ public class NetworkImageView extends ImageView { /** The URL of the network image to load */ private String mUrl; - /** - * Resource ID of the image to be used as a placeholder until the network image is loaded. - */ + /** Resource ID of the image to be used as a placeholder until the network image is loaded. */ private int mDefaultImageId; - /** - * Resource ID of the image to be used if the network response fails. - */ + /** Resource ID of the image to be used if the network response fails. */ private int mErrorImageId; /** Local copy of the ImageLoader. */ @@ -66,18 +57,21 @@ public class NetworkImageView extends ImageView { * immediately either set the cached image (if available) or the default image specified by * {@link NetworkImageView#setDefaultImageResId(int)} on the view. * - * NOTE: If applicable, {@link NetworkImageView#setDefaultImageResId(int)} and - * {@link NetworkImageView#setErrorImageResId(int)} should be called prior to calling - * this function. + * <p>NOTE: If applicable, {@link NetworkImageView#setDefaultImageResId(int)} and {@link + * NetworkImageView#setErrorImageResId(int)} should be called prior to calling this function. + * + * <p>Must be called from the main thread. * * @param url The URL that should be loaded into this ImageView. * @param imageLoader ImageLoader that will be used to make the request. */ + @MainThread public void setImageUrl(String url, ImageLoader imageLoader) { + Threads.throwIfNotOnMainThread(); mUrl = url; mImageLoader = imageLoader; // The URL has potentially changed. See if we need to load it. - loadImageIfNecessary(false); + loadImageIfNecessary(/* isInLayoutPass= */ false); } /** @@ -98,6 +92,7 @@ public class NetworkImageView extends ImageView { /** * 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) { @@ -149,45 +144,54 @@ public class NetworkImageView extends ImageView { // 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); - } - } - - @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, false); + mImageContainer = + mImageLoader.get( + mUrl, + new ImageListener() { + @Override + public void onErrorResponse(VolleyError error) { + if (mErrorImageId != 0) { + setImageResource(mErrorImageId); + } + } + + @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; } - }); - return; - } - - if (response.getBitmap() != null) { - setImageBitmap(response.getBitmap()); - } else if (mDefaultImageId != 0) { - setImageResource(mDefaultImageId); - } - } - }, maxWidth, maxHeight, scaleType); + + if (response.getBitmap() != null) { + setImageBitmap(response.getBitmap()); + } else if (mDefaultImageId != 0) { + setImageResource(mDefaultImageId); + } + } + }, + maxWidth, + maxHeight, + scaleType); } private void setDefaultImageOrNull() { - if(mDefaultImageId != 0) { + if (mDefaultImageId != 0) { setImageResource(mDefaultImageId); - } - else { + } else { setImageBitmap(null); } } @@ -195,7 +199,7 @@ public class NetworkImageView extends ImageView { @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { super.onLayout(changed, left, top, right, bottom); - loadImageIfNecessary(true); + loadImageIfNecessary(/* isInLayoutPass= */ true); } @Override |