初識Volley(三)

2257 ワード

NetworkImageView分析:
public class NetworkImageView extends ImageView
ImageViewから継承され、1つ追加されました
public void setImageUrl(String url, ImageLoader imageLoader) {}
メソッド、パラメータはUrlアドレスとImageLoaderオブジェクトを含む
コアメソッド:
private void loadImageIfNecessary(final boolean isInLayoutPass) {}
内部実装、booleanタイプパラメータはネットワークを再要求するかどうかを表し、true:falseを再要求する:キャッシュを取る
内部実装はImageLoaderと同様であり、いずれもImageContainerのnewの1つのImageListenerによって行われ、ImageListenerではUrlの空判定のみを行い、Urlがnullである場合はImageContainerが呼び出される.cancelRequest();リクエストのキャンセル
上書き方法:
 
@Override

    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {

        super.onLayout(changed, left, top, right, bottom);

        //onLayout 

        loadImageIfNecessary(true);

    }
@Override

    protected void onDetachedFromWindow() {

        // View Release 

        if (mImageContainer != null) {

            // If the view was bound to an image request, cancel it and clear

            // out the image from the view.

            mImageContainer.cancelRequest();

            setImageBitmap(null);

            // also clear out the container so we can reload the image if necessary.

            mImageContainer = null;

        }

        super.onDetachedFromWindow();

    }
//drawable 

 @Override

    protected void drawableStateChanged() {

        super.drawableStateChanged();

        invalidate();

    }

まとめ:ネットワークリクエストのダウンロード画像表示は、従来のImageViewよりも多くのネットワーク処理を使用することができます.
ダウンロード開始のデフォルト図とダウンロードエラー後の表示図を設定する2つの方法も追加されました
/**

     * Sets the default image resource ID to be used for this view until the attempt to load it

     * completes.

     */

    public void setDefaultImageResId(int defaultImage) {

        mDefaultImageId = defaultImage;

    }



    /**

     * Sets the error image resource ID to be used for this view in the event that the image

     * requested fails to load.

     */

    public void setErrorImageResId(int errorImage) {

        mErrorImageId = errorImage;

    }