@Override public void onMovedToScrapHeap(View view) { // cancel image fetch requests if the view has been moved to recycler. NetworkImageView niv = (NetworkImageView) view.findViewById(R.id.theme_grid_item_image); if (niv != null) { // this tag is set in the ThemeTabAdapter class ScreenshotHolder tag = (ScreenshotHolder) niv.getTag(); if (tag != null && tag.requestURL != null) { // need a listener to cancel request, even if the listener does nothing ImageContainer container = WordPress.imageLoader.get(tag.requestURL, new ImageListener() { @Override public void onErrorResponse(VolleyError error) { } @Override public void onResponse(ImageContainer response, boolean isImmediate) { } }); container.cancelRequest(); } } }
@Override public Drawable getDrawable(String source) { source = checkUrl(source); UrlDrawable urlDrawable = new UrlDrawable(); ImageContainer ic = mImageLoader.getForImageSpan(this, source, mTextView, new ImageCallback(mCtx.getResources(), urlDrawable)); // TODO 当帖子滚动屏幕外的时候 如何和ImageView一样 取消前面没用的下载请求??? if (ic != null && ic.getBitmap() != null) { BitmapDrawable drawable = new BitmapDrawable(mCtx.getResources(), ic.getBitmap()); drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); return drawable; } if (ic != null) { mImageContainers.add(ic); } // get the actual source // ImageGetterAsyncTask asyncTask = new ImageGetterAsyncTask(urlDrawable); // asyncTask.execute(source); // return reference to URLDrawable where I will change with actual image from // the src tag return urlDrawable; }
public static Promise<ImageResult> imagePromise(ImageLoader imageLoader, final String url, int maxWidth, int maxHeight) { final DeferredObject<ImageResult> promise = new DeferredObject<ImageResult>(); imageLoader.get(url, new ImageListener() { @Override public void onResponse(ImageContainer imageContainer, boolean isImmediate) { if (imageContainer.getBitmap() != null) { promise.success(new ImageResult(imageContainer, isImmediate)); } } @Override public void onErrorResponse(VolleyError volleyError) { promise.failure(volleyError); } }, maxWidth, maxHeight); return promise; }
private void fetchCover() { fetching_cover = true; updateProgress(); App.getImageLoader().get( API.getCoverUrl( manga.getCover() ), new ImageListener() { @Override public void onResponse( ImageContainer container, boolean something ) { TransitionDrawable cover_transition = new TransitionDrawable( new Drawable[]{ cover_view.getDrawable(), new BitmapDrawable( getResources(), container.getBitmap() ) } ); cover_view.setImageDrawable( cover_transition ); cover_transition.startTransition( 200 ); fetching_cover = false; updateProgress(); } @Override public void onErrorResponse( VolleyError error ) { Log.e( "MJ", "Failed to fetch cover for " + manga.getSysName() ); fetching_cover = false; updateProgress(); } } ); }
ChildViewBuffer(View v) { mImageView = (NetworkImageView) v.findViewById(R.id.ImageView); mImageView.setErrorImageResId(R.drawable.logo); mTitleText = (TextView) v.findViewById(R.id.Title); mNumText = (TextView) v.findViewById(R.id.Num); iImageLoader = VolleyLoader.getInstance().getImageLoader(); iImageListener = new ImageListener() { @Override public void onErrorResponse(VolleyError error) { Log.d("TAG", "onErrorResponse():" + error); } @Override public void onResponse(ImageContainer response, boolean isImmediate) { Log.d("TAG", "onResponse():" + isImmediate); } }; }
@SuppressLint("ResourceAsColor") @Override public void onBindViewHolder(final ContactViewHolder contactViewHolder, int i) { contactViewHolder.playername.setText(list.get(i).getfName()); String player = playerimage.replace("myplayerid", list.get(i).getId()); mImageLoader.get(player, new ImageListener() { @Override public void onErrorResponse(VolleyError error) { } @Override public void onResponse(ImageContainer response, boolean arg1) { if (response.getBitmap() != null) { contactViewHolder.player .setImageBitmap(getRoundedCornerBitmap( response.getBitmap(), 100)); } } }); }
private void loadLoResImage() { if (!hasLayout() || TextUtils.isEmpty(mLoResImageUrl)) { return; } // skip if this same image url is already being loaded if (isRequestingUrl(mLoResContainer, mLoResImageUrl)) { AppLog.d(AppLog.T.READER, "reader photo > already requesting lo-res"); return; } Point pt = DisplayUtils.getDisplayPixelSize(this.getContext()); int maxSize = Math.min(pt.x, pt.y); showProgress(); mLoResContainer = WordPress.imageLoader.get(mLoResImageUrl, new ImageLoader.ImageListener() { @Override public void onErrorResponse(VolleyError error) { AppLog.e(AppLog.T.READER, error); hideProgress(); showError(); } @Override public void onResponse(final ImageContainer response, boolean isImmediate) { post(new Runnable() { @Override public void run() { handleResponse(response.getBitmap(), true); } }); } }, maxSize, maxSize); }
private void loadHiResImage() { if (!hasLayout() || TextUtils.isEmpty(mHiResImageUrl)) { return; } if (isRequestingUrl(mHiResContainer, mHiResImageUrl)) { AppLog.d(AppLog.T.READER, "reader photo > already requesting hi-res"); return; } Point pt = DisplayUtils.getDisplayPixelSize(this.getContext()); int maxSize = Math.max(pt.x, pt.y); mHiResContainer = WordPress.imageLoader.get(mHiResImageUrl, new ImageLoader.ImageListener() { @Override public void onErrorResponse(VolleyError error) { AppLog.e(AppLog.T.READER, error); } @Override public void onResponse(final ImageContainer response, boolean isImmediate) { post(new Runnable() { @Override public void run() { handleResponse(response.getBitmap(), false); } }); } }, maxSize, maxSize); }
@Override public void onMovedToScrapHeap(View view) { // cancel image fetch requests if the view has been moved to recycler. View imageView = view.findViewById(R.id.media_grid_item_image); if (imageView != null) { // this tag is set in the MediaGridAdapter class String tag = (String) imageView.getTag(); if (tag != null && tag.startsWith("http")) { // need a listener to cancel request, even if the listener does nothing ImageContainer container = WordPress.imageLoader.get(tag, new ImageListener() { @Override public void onErrorResponse(VolleyError error) { } @Override public void onResponse(ImageContainer response, boolean isImmediate) { } }); container.cancelRequest(); } } CheckableFrameLayout layout = (CheckableFrameLayout) view.findViewById(R.id.media_grid_frame_layout); if (layout != null) { layout.setOnCheckedChangeListener(null); } }
public void testVolleyImageLoaderGetNullHost() throws InterruptedException { Handler mainLooperHandler = new Handler(WordPress.getContext().getMainLooper()); final CountDownLatch countDownLatch = new CountDownLatch(1); final boolean success[] = new boolean[1]; Runnable getImage = new Runnable() { @Override public void run() { try { // This call crash on old volley versions WordPress.imageLoader.get("http;///hello/null/host", new ImageListener() { @Override public void onResponse(ImageContainer imageContainer, boolean b) {} @Override public void onErrorResponse(VolleyError volleyError) {} }, 1, 1); success[0] = true; } catch (Exception e) { AppLog.e(T.TESTS, e); success[0] = false; } finally { countDownLatch.countDown(); } } }; mainLooperHandler.post(getImage); countDownLatch.await(1, TimeUnit.SECONDS); assertTrue("Invalid Volley library version", success[0]); }
@Override public void onResponse(ImageContainer response, boolean isImmediate) { if(isCancel)return; if (response.getBitmap() != null) { imgView.setImageBitmap(response.getBitmap()); } else if (defaultImageResId != 0) { imgView.setImageResource(defaultImageResId); } mImageMaps.remove(this); }
@Override public void onDestroy() { super.onDestroy(); getActivity().unregisterReceiver( update_receiver ); for ( ImageContainer request : cover_requests.values() ) request.cancelRequest(); }
private void showProgressNotification( Chapter chapter ) { final NotificationManager manager = (NotificationManager)getSystemService( NOTIFICATION_SERVICE ); // Only show the chapter title if there is one String content_text = chapter.getManga().getTitle() + " " + chapter.toString(); if ( chapter.hasTitle() ) content_text += ": " + chapter.getTitle(); final Notification.Builder builder = new Notification.Builder( this ) .setSmallIcon( R.drawable.ic_notification ) .setContentTitle( "Saving pinned chapters" ) .setContentText( content_text ) .setProgress( 0, 0, true ); App.getImageLoader().get( API.getCoverUrl( chapter.getManga().getCover() ), new ImageListener() { @Override public void onResponse( ImageContainer container, boolean immediate ) { if ( queue_task == null || queue_task.isCancelled() ) return; builder.setLargeIcon( container.getBitmap() ); manager.notify( NOTIFICATION_ID, builder.getNotification() ); } @Override public void onErrorResponse( VolleyError volleyError ) { if ( queue_task == null || queue_task.isCancelled() ) return; manager.notify( NOTIFICATION_ID, builder.getNotification() ); } } ); }
void loadImageIfNecessary(final boolean isInLayoutPass) { int width = getWidth(); int height = getHeight(); ScaleType scaleType = getScaleType(); boolean wrapWidth = false; boolean wrapHeight = false; if (getLayoutParams() != null) { if (getLayoutParams().width == -2) { wrapWidth = true; } else { wrapWidth = false; } if (getLayoutParams().height == -2) { wrapHeight = true; } else { wrapHeight = false; } } boolean isFullyWrapContent; if (wrapWidth && wrapHeight) { isFullyWrapContent = true; } else { isFullyWrapContent = false; } if (width != 0 || height != 0 || isFullyWrapContent) { if (TextUtils.isEmpty(this.mUrl)) { if (this.mImageContainer != null) { this.mImageContainer.cancelRequest(); this.mImageContainer = null; } setDefaultImageOrNull(); return; } int maxWidth; int maxHeight; if (!(this.mImageContainer == null || this.mImageContainer.getRequestUrl() == null)) { if (!this.mImageContainer.getRequestUrl().equals(this.mUrl)) { this.mImageContainer.cancelRequest(); setDefaultImageOrNull(); } else { return; } } if (wrapWidth) { maxWidth = 0; } else { maxWidth = width; } if (wrapHeight) { maxHeight = 0; } else { maxHeight = height; } this.mImageContainer = this.mImageLoader.get(this.mUrl, new ImageListener() { public void onErrorResponse(VolleyError error) { if (NetworkImageView.this.mErrorImageId != 0) { NetworkImageView.this.setImageResource(NetworkImageView.this.mErrorImageId); } } public void onResponse(final ImageContainer response, boolean isImmediate) { if (isImmediate && isInLayoutPass) { NetworkImageView.this.post(new Runnable() { public void run() { AnonymousClass1.this.onResponse(response, false); } }); } else if (response.getBitmap() != null) { NetworkImageView.this.setImageBitmap(response.getBitmap()); } else if (NetworkImageView.this.mDefaultImageId != 0) { NetworkImageView.this.setImageResource(NetworkImageView.this.mDefaultImageId); } } }, maxWidth, maxHeight, scaleType); } }
private boolean isRequestingUrl(ImageContainer container, String url) { return (container != null && container.getRequestUrl() != null && container.getRequestUrl().equals(url)); }
@Override public void onResponse(ImageContainer response, boolean isImmediate) { if (mTextView.getTag(R.id.poste_image_getter) == UrlImageGetter.this && response.getBitmap() != null) { BitmapDrawable drawable = new BitmapDrawable(mRes, response.getBitmap()); drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); String src = response.getRequestUrl(); // redraw the image by invalidating the container // 由于下面重新设置了ImageSpan,所以这里invalidate就不必要了吧 // urlDrawable.invalidateSelf(); // UrlImageGetter.this.mTextView.invalidate(); // TODO 这种方式基本完美解决显示图片问题, blog? // 把提取到下面显示的图片在放出来? 然后点击任何图片 进入到 帖子图片浏览界面。。? TextView v = UrlImageGetter.this.mTextView; CharSequence text = v.getText(); if (!(text instanceof Spannable)) { return; } Spannable spanText = (Spannable) text; @SuppressWarnings("unchecked") ArrayList<String> imgs = (ArrayList<String>) v.getTag(R.id.poste_image_data); ImageSpan[] imageSpans = spanText.getSpans(0, spanText.length(), ImageSpan.class); L.i("%b X Recycled %b src: %s", isImmediate, response.getBitmap().isRecycled(), src); for (ImageSpan imgSpan : imageSpans) { int start = spanText.getSpanStart(imgSpan); int end = spanText.getSpanEnd(imgSpan); L.i("%d-%d :%s", start, end, imgSpan.getSource()); String url = imgSpan.getSource(); url = checkUrl(url); if (src.equals(url)) { spanText.removeSpan(imgSpan); ImageSpan is = new ImageSpan(drawable, src, ImageSpan.ALIGN_BASELINE); spanText.setSpan(is, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } if (imgs != null && imgs.contains(src)) { ImageClickableSpan ics = new ImageClickableSpan(src); spanText.setSpan(ics, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } } v.setText(spanText); } }
/** * 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. */ private void loadImageIfNecessary(final boolean isInLayoutPass) { int width = getWidth(); int height = getHeight(); boolean isFullyWrapContent = getLayoutParams() != null && getLayoutParams().height == LayoutParams.WRAP_CONTENT && getLayoutParams().width == 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. 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; } setImageBitmap(null); 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(); setImageBitmap(null); } } // The pre-existing content of this view didn't match the current URL. Load the new image // from the network. ImageContainer newContainer = 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); } }); return; } if (response.getBitmap() != null) { setImageBitmap(response.getBitmap()); } else if (mDefaultImageId != 0) { setImageResource(mDefaultImageId); } } }); // update the ImageContainer to be the new bitmap container. mImageContainer = newContainer; }
private void loadImageIfNecessary(final boolean isInLayoutPass) { final int width = getWidth(); int height = getHeight(); boolean isFullyWrapContent = getLayoutParams() != null && getLayoutParams().height == LayoutParams.WRAP_CONTENT && getLayoutParams().width == LayoutParams.WRAP_CONTENT; 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(); } } ImageContainer newContainer = mImageLoader.get(mUrl, new ImageListener() { @Override public void onErrorResponse(VolleyError error) { if (mErrorImageId != 0) { setImageResource(mErrorImageId); } if (mObserver != null) { mObserver.onError(); } } @Override public void onResponse(final ImageContainer response, boolean isImmediate) { if (isImmediate && isInLayoutPass) { post(new Runnable() { @Override public void run() { onResponse(response, false); } }); return; } int bWidth = 0, bHeight = 0; if (response.getBitmap() != null) { setImageBitmap(response.getBitmap()); bWidth = response.getBitmap().getWidth(); bHeight = response.getBitmap().getHeight(); adjustImageAspect(bWidth, bHeight); } else if (mDefaultImageId != 0) { setImageResource(mDefaultImageId); } if (mObserver != null) { mObserver.onSuccess(); } } }); mImageContainer = newContainer; }
public ImageResult(ImageContainer imageContainer, boolean fromCache) { this.imageContainer = imageContainer; this.fromCache = fromCache; }
/** * 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. */ private void loadImageIfNecessary(final boolean isInLayoutPass) { int width = getWidth(); int height = getHeight(); boolean isFullyWrapContent = getLayoutParams().height == LayoutParams.WRAP_CONTENT && getLayoutParams().width == 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. 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; } setImageBitmap(null); 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(); setImageBitmap(null); } } // The pre-existing content of this view didn't match the current URL. Load the new image // from the network. ImageContainer newContainer = 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); } }); return; } if (response.getBitmap() != null) { setImageBitmap(response.getBitmap()); } else if (mDefaultImageId != 0) { setImageResource(mDefaultImageId); } } }); // update the ImageContainer to be the new bitmap container. mImageContainer = newContainer; }
/** * 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. */ private void loadImageIfNecessary(final boolean isInLayoutPass) { // 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; } setImageBitmap(null); 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(); setImageBitmap(null); } } // The pre-existing content of this view didn't match the current URL. // Load the new image // from the network. ImageContainer newContainer = mImageLoader.get(mUrl, new ImageListener() { @Override public void onErrorResponse(VolleyError error, Request<?> request) { 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); } }); return; } if (response.getBitmap() != null) { setImageBitmap(response.getBitmap(), !isImmediate); } else if (mDefaultImageId != 0) { setImageResource(mDefaultImageId); } } }, getWidth(), getHeight()); // update the ImageContainer to be the new bitmap container. mImageContainer = newContainer; }
/** * Gets the captcha image. */ private void getImg() { // TODO Set priority and timeout Log.i(LoginActivity.class.getName(), "Loading captcha image..."); ImageLoader imageLoader = MyVolley.getInstance().getImageLoader(); imageLoader.setBatchedResponseDelay(0); imageLoader.get("https://academics.ddn.upes.ac.in/upes/modules/create_image.php", new ImageLoader.ImageListener() { final ImageView view = ivCapImg; final int defaultImageResId = 5; final int errorImageResId = R.drawable.ic_menu_report_image; @Override public void onErrorResponse(VolleyError error) { if (errorImageResId != 0) { pbar.setVisibility(View.INVISIBLE); view.setVisibility(View.VISIBLE); view.setScaleType(ImageView.ScaleType.CENTER); view.setImageResource(errorImageResId); String msg = MyVolleyErrorHelper.getMessage(error, mContext); Toast.makeText(mContext, msg, Toast.LENGTH_SHORT).show(); Log.e(getActivity().getClass().getName(), msg); } } @Override public void onResponse(ImageContainer response, boolean isImmediate) { if (response.getBitmap() != null) { pbar.setVisibility(View.INVISIBLE); view.setVisibility(View.VISIBLE); view.setImageBitmap(response.getBitmap()); view.setScaleType(ImageView.ScaleType.FIT_XY); Log.i(LoginActivity.class.getName(), "Loaded captcha image."); } else if (defaultImageResId != 0) { pbar.setVisibility(ProgressBar.VISIBLE); view.setVisibility(View.INVISIBLE); } } }); }
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final MovableBitmapView iv1 = (MovableBitmapView)findViewById(R.id.image_1); final MovableBitmapView iv2 = (MovableBitmapView)findViewById(R.id.image_2); final MovableBitmapView iv3 = (MovableBitmapView)findViewById(R.id.image_3); final MovableBitmapView iv4 = (MovableBitmapView)findViewById(R.id.image_4); final MovableBitmapView iv5 = (MovableBitmapView)findViewById(R.id.image_5); final MovableBitmapView iv6 = (MovableBitmapView)findViewById(R.id.image_6); iv1.setImageResource(R.drawable.sample1); iv2.setImageResource(R.drawable.sample2); iv3.setImageResource(R.drawable.sample3); iv4.setImageResource(R.drawable.sample4); RequestQueue queue = Volley.newRequestQueue(getApplicationContext()); ImageLoader loader = new ImageLoader(queue, new BitmapLruCache()); String url = "http://cinephilefix.files.wordpress.com/2010/11/mooon.jpg"; loader.get(url, new ImageLoader.ImageListener() { @Override public void onErrorResponse(VolleyError error) { Log.v(TAG, "onError:"+error.toString()); } @Override public void onResponse(ImageContainer response, boolean isImmediate) { if (response == null) { Log.v(TAG, "onResponse null"); return; } if (response.getBitmap() == null) { Log.v(TAG, "onResponse bitmap null"); return; } iv5.setBitmap(response.getBitmap()); iv6.setBitmap(response.getBitmap()); } }); }
public void cancelAll() { for ( ImageContainer request : cover_requests.values() ) request.cancelRequest(); }
@Override public View getView( int index, View view, ViewGroup parent ) { if ( view == null ) { view = getActivity().getLayoutInflater().inflate( R.layout.listitem_search, parent, false ); } String sys_name, title, author, tags; try { sys_name = query_results.getJSONArray( "sys_name" ).getString( index ); title = query_results.getJSONArray( "title" ).getString( index ); author = query_results.getJSONArray( "author" ).getString( index ); tags = query_results.getJSONArray( "tags" ).getString( index ); author = author == null || author.equals( "null" ) ? "" : "by " + author; } catch ( JSONException e ) { sys_name = ""; title = "error"; author = "contact developer"; tags = null; } final Cover cover = new Manga( sys_name ).getCover(); final ImageView cover_view = (ImageView)view.findViewById( R.id.cover ); cover_view.setTag( cover ); cover_view.setImageDrawable( null ); ( (TextView)view.findViewById( R.id.title )).setText( title ); ( (TextView)view.findViewById( R.id.author )).setText( author ); ( (TextView)view.findViewById( R.id.tags )).setText( tags ); // Queue and store image request for cover if ( cover_requests.containsKey( view )) cover_requests.get( view ).cancelRequest(); ImageContainer request = App.getImageLoader().get( API.getCoverUrl( new Manga( sys_name ).getCover() ), new ImageListener() { @Override public void onResponse( ImageContainer container, boolean instant ) { if ( !cover.equals( cover_view.getTag() )) return; if ( instant ) cover_view.setImageBitmap( container.getBitmap() ); else { TransitionDrawable cover_transition = new TransitionDrawable( new Drawable[]{ new ColorDrawable(), new BitmapDrawable( getResources(), container.getBitmap() ) } ); cover_view.setImageDrawable( cover_transition ); cover_transition.startTransition( 200 ); } } @Override public void onErrorResponse( VolleyError volleyError ) { if ( !cover.equals( cover_view.getTag() )) return; cover_view.setImageDrawable( null ); } }, COVER_SIZE, COVER_SIZE ); cover_requests.put( view, request ); return view; }
/** * 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. */ private void loadImageIfNecessary(final boolean isInLayoutPass) { int width = getWidth(); int height = getHeight(); boolean isFullyWrapContent = getLayoutParams() != null && getLayoutParams().height == LayoutParams.WRAP_CONTENT && getLayoutParams().width == 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. 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; } setImageBitmap(null); 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(); setImageBitmap(null); } } // The pre-existing content of this view didn't match the current URL. Load the new image // from the network. ImageContainer newContainer = 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); } }); return; } if (response.getBitmap() != null) { setImageBitmap(response.getBitmap()); } else if (mDefaultImageId != 0) { setImageResource(mDefaultImageId); } } }); // update the ImageContainer to be the new bitmap container. mImageContainer = newContainer; }
/** * 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. */ private void loadImageIfNecessary(final boolean isInLayoutPass) { int width = getWidth(); int height = getHeight(); boolean isFullyWrapContent = getLayoutParams() != null && getLayoutParams().height == LayoutParams.WRAP_CONTENT && getLayoutParams().width == 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. 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(); } } // The pre-existing content of this view didn't match the current URL. Load the new image // from the network. ImageContainer newContainer = 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); } }); return; } if (response.getBitmap() != null) { setImageBitmap(response.getBitmap()); } else if (mDefaultImageId != 0) { setImageResource(mDefaultImageId); } } }); // update the ImageContainer to be the new bitmap container. mImageContainer = newContainer; }
/** * Loads the image for the view if it isn't already loaded. */ private void loadImageIfNecessary() { int width = getWidth(); int height = getHeight(); // if the view's bounds aren't known yet, hold off on loading the image. if (width == 0 && height == 0) { 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; } setImageBitmap(null); 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(); setImageBitmap(null); } } // The pre-existing content of this view didn't match the current URL. Load the new image // from the network. ImageContainer newContainer = mImageLoader.get(mUrl, ImageLoader.getImageListener(this, mDefaultImageId, mErrorImageId)); // update the ImageContainer to be the new bitmap container. mImageContainer = newContainer; }