/* * ****************************************************************************** * Copyright (c) 2013-2014 Gabriele Mariotti. * * 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 it.gmariotti.cardslib.library.internal; import android.content.Context; import android.graphics.Bitmap; import android.view.View; import android.view.ViewGroup; import it.gmariotti.cardslib.library.internal.base.BaseCard; import it.gmariotti.cardslib.library.view.component.CardThumbnailView; /** * Card Thumbnail model. * </p> * You can customize this component. See https://github.com/gabrielemariotti/cardslib/tree/master/doc/THUMBNAIL.md for more information. * </p> * Load a image from a Resource ID or an URL. * </p> * <b>Usage:</b> * <pre><code> * //Create thumbnail * CardThumbnail thumb = new CardThumbnail(getActivity().getApplicationContext()); * * //Set resource * thumb.setDrawableResource(R.drawable.carddemo_ic_gmaps_large); * * //Add thumbnail to a card * card.addCardThumbnail(thumb); * </code></pre> * or * <pre><code> * //Set resource * thumb.setUrlResource("https://mydomain.com/photo.jpg"); * </code></pre> * * You can easily extend and customize this class providing your inner layout and * setting your values with {@link #setupInnerViewElements(android.view.ViewGroup, android.view.View)} method. * <pre><code> * * public class CustomThumbCard extends CardThumbnail { * * public CustomThumbCard(Context context) { * super(context); * } * * @Override * public void setupInnerViewElements(ViewGroup parent, View viewImage) { * if (viewImage!=null){ * viewImage.getLayoutParams().width=250; * viewImage.getLayoutParams().height=250; * } * } * } * </code></pre> * </p> * @author Gabriele Mariotti (gabri.mariotti@gmail.com) */ public class CardThumbnail extends BaseCard { /** * Resource Drawable ID */ protected int drawableResource; /** * Resource Drawable URL */ protected String urlResource; /** * Uses an external library to load image */ protected boolean mExternalUsage=false; /** * Placeholder */ //protected int placeholderResourceId=0; /** * errorResourceId: image used if an error occurs while downloading file */ protected int errorResourceId=0; /** * Interface for custom source Thumbnail */ public interface CustomSource { /** * @return a string tag to identify the image */ String getTag(); /** * @return the bitmap from custom source */ Bitmap getBitmap(); } protected CustomSource customSource = null; /** * Flag to send a broadcast after the bitmap is attached to imageView */ protected boolean sendBroadcastAfterAttach = true; // ------------------------------------------------------------- // Constructors // ------------------------------------------------------------- /** * Constructor * * @param context context */ public CardThumbnail(Context context) { super(context); } /** * ThumbnailCard doesn't provide a Thumbnail Inner Layout. * Don't use it! * * @param context context * @param innerLayout layout resource ID */ public CardThumbnail(Context context,int innerLayout) { super(context); } /** * This method sets values to header elements and customizes view. * * Override this method to set your elements inside InnerView. * * @param parent parent view (Inner Frame) * @param imageView ImageView */ @Override public void setupInnerViewElements(ViewGroup parent, View imageView) { return; } /** * You can override this method to transform the bitmap before * is attached to ImageView. * * * @param imageView imageView * @param bitmap bitmap * @return true if the callback has already been attached the bitmap to imageView , false otherwise. */ public boolean applyBitmap(View imageView, Bitmap bitmap){ return false; } /** * Returns the resource ID for Thumbnail * @return resource ID */ public int getDrawableResource() { return drawableResource; } /** * Sets the resource ID for Thumbnail * * @param drawableResource resource ID */ public void setDrawableResource(int drawableResource) { this.drawableResource = drawableResource; } /** * Returns the URL for Thumbnail * * @return url */ public String getUrlResource() { return urlResource; } /** * Sets the url for thumbnail * * @param urlResource url */ public void setUrlResource(String urlResource) { this.urlResource = urlResource; } /** * Returns the custom source for Thumbnail * * @return the listener */ public CustomSource getCustomSource() { return customSource; } /** * Sets the listener for a custom source Thumbnail */ public void setCustomSource(CustomSource customSource) { this.customSource = customSource; } /** * Indicates if CardThumbnail will use an external library to load image * * @return */ public boolean isExternalUsage() { return mExternalUsage; } /** * Sets <code>true</code> to use an external library to load image * * @param externalUsage <code>true</code> to use an external library to load image */ public void setExternalUsage(boolean externalUsage) { this.mExternalUsage = externalUsage; } /** * Returns image used if an error occurs while downloading file * * @return */ public int getErrorResourceId() { return errorResourceId; } /** * Sets image used if an error occurs while downloading file * * @param errorResourceId */ public void setErrorResource(int errorResourceId) { this.errorResourceId = errorResourceId; } /** * Returns the flag which indicates to send a broadcast after the bitmap is attached * * @return */ public boolean isSendBroadcastAfterAttach() { return sendBroadcastAfterAttach; } /** * Sets the flag to send a broadcast after the bitmap is attached * * @param sendBroadcastAfterAttach */ public void setSendBroadcastAfterAttach(boolean sendBroadcastAfterAttach) { this.sendBroadcastAfterAttach = sendBroadcastAfterAttach; } /** * Return the CardThumbnailCardView * @return */ public CardThumbnailView getCardThumbnailView() { if (getParentCard() != null) return getParentCard().getCardView().getInternalThumbnailLayout(); return null; } }