/******************************************************************************* * Copyright 2013-2014 Sergey Tarasevich * * 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 * * 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.nostra13.universalimageloader.core.imageaware; import android.graphics.Bitmap; import android.graphics.drawable.Drawable; import android.view.View; import com.nostra13.universalimageloader.core.assist.ViewScaleType; /** * Represents image aware view which provides all needed properties and behavior for image processing and displaying * through {@link com.nostra13.universalimageloader.core.ImageLoader ImageLoader}. * It can wrap any Android {@link android.view.View View} which can be accessed by {@link #getWrappedView()}. Wrapped * view is returned in {@link com.nostra13.universalimageloader.core.listener.ImageLoadingListener ImageLoadingListener}'s * callbacks. * * @author Sergey Tarasevich (nostra13[at]gmail[dot]com) * @see ViewAware * @see ImageViewAware * @see NonViewAware * @since 1.9.0 */ public interface ImageAware { /** * Returns width of image aware view. This value is used to define scale size for original image. * Can return 0 if width is undefined.<br /> * Is called on UI thread if ImageLoader was called on UI thread. Otherwise - on background thread. */ int getWidth(); /** * Returns height of image aware view. This value is used to define scale size for original image. * Can return 0 if height is undefined.<br /> * Is called on UI thread if ImageLoader was called on UI thread. Otherwise - on background thread. */ int getHeight(); /** * Returns {@linkplain com.nostra13.universalimageloader.core.assist.ViewScaleType scale type} which is used for * scaling image for this image aware view. Must <b>NOT</b> return <b>null</b>. */ ViewScaleType getScaleType(); /** * Returns wrapped Android {@link android.view.View View}. Can return <b>null</b> if no view is wrapped or view was * collected by GC.<br /> * Is called on UI thread if ImageLoader was called on UI thread. Otherwise - on background thread. */ View getWrappedView(); /** * Returns a flag whether image aware view is collected by GC or whatsoever. If so then ImageLoader stop processing * of task for this image aware view and fires * {@link com.nostra13.universalimageloader.core.listener.ImageLoadingListener#onLoadingCancelled(String, * android.view.View) ImageLoadingListener#onLoadingCancelled(String, View)} callback.<br /> * Mey be called on UI thread if ImageLoader was called on UI thread. Otherwise - on background thread. * * @return <b>true</b> - if view is collected by GC and ImageLoader should stop processing this image aware view; * <b>false</b> - otherwise */ boolean isCollected(); /** * Returns ID of image aware view. Point of ID is similar to Object's hashCode. This ID should be unique for every * image view instance and should be the same for same instances. This ID identifies processing task in ImageLoader * so ImageLoader won't process two image aware views with the same ID in one time. When ImageLoader get new task * it cancels old task with this ID (if any) and starts new task. * <p/> * It's reasonable to return hash code of wrapped view (if any) to prevent displaying non-actual images in view * because of view re-using. */ int getId(); /** * Sets image drawable into this image aware view.<br /> * Displays drawable in this image aware view * {@linkplain com.nostra13.universalimageloader.core.DisplayImageOptions.Builder#showImageForEmptyUri( *android.graphics.drawable.Drawable) for empty Uri}, * {@linkplain com.nostra13.universalimageloader.core.DisplayImageOptions.Builder#showImageOnLoading( *android.graphics.drawable.Drawable) on loading} or * {@linkplain com.nostra13.universalimageloader.core.DisplayImageOptions.Builder#showImageOnFail( *android.graphics.drawable.Drawable) on loading fail}. These drawables can be specified in * {@linkplain com.nostra13.universalimageloader.core.DisplayImageOptions display options}.<br /> * Also can be called in {@link com.nostra13.universalimageloader.core.display.BitmapDisplayer BitmapDisplayer}.< br /> * Is called on UI thread if ImageLoader was called on UI thread. Otherwise - on background thread. * * @return <b>true</b> if drawable was set successfully; <b>false</b> - otherwise */ boolean setImageDrawable(Drawable drawable); /** * Sets image bitmap into this image aware view.<br /> * Displays loaded and decoded image {@link android.graphics.Bitmap} in this image view aware. * Actually it's used only in * {@link com.nostra13.universalimageloader.core.display.BitmapDisplayer BitmapDisplayer}.< br /> * Is called on UI thread if ImageLoader was called on UI thread. Otherwise - on background thread. * * @return <b>true</b> if bitmap was set successfully; <b>false</b> - otherwise */ boolean setImageBitmap(Bitmap bitmap); }