aboutsummaryrefslogtreecommitdiffstats
path: root/libraries/AndroidBootstrap/src/com/beardedhen/androidbootstrap/BootstrapThumbnail.java
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/AndroidBootstrap/src/com/beardedhen/androidbootstrap/BootstrapThumbnail.java')
-rw-r--r--libraries/AndroidBootstrap/src/com/beardedhen/androidbootstrap/BootstrapThumbnail.java209
1 files changed, 209 insertions, 0 deletions
diff --git a/libraries/AndroidBootstrap/src/com/beardedhen/androidbootstrap/BootstrapThumbnail.java b/libraries/AndroidBootstrap/src/com/beardedhen/androidbootstrap/BootstrapThumbnail.java
new file mode 100644
index 000000000..a4e1ba1bc
--- /dev/null
+++ b/libraries/AndroidBootstrap/src/com/beardedhen/androidbootstrap/BootstrapThumbnail.java
@@ -0,0 +1,209 @@
+package com.beardedhen.androidbootstrap;
+
+import java.util.HashMap;
+import java.util.Map;
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.Typeface;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.FrameLayout;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+public class BootstrapThumbnail extends FrameLayout
+{
+ private static final int DEFAULT_WIDTH = 150; //width of thumbnail when no width is given
+ private static final int DEFAULT_HEIGHT = 150;//height of thumbnail when no height is given
+ private static final int DEFAULT_MAX_PADDING = 8; //8dp is max padding size when padding isn't specified by user
+ private static final int DEFAULT_MIN_PADDING = 4; //4dp
+ private static final String DEFAULT_TYPE = "rounded";
+
+ private static Map<String, ThumbnailTypes> bThumbnailTypeMap;
+ private static Typeface font;
+ private ViewGroup container;
+ private LinearLayout placeholder;
+ private TextView dimensionsLabel;
+ private boolean roundedCorners = true;
+
+ static{
+ bThumbnailTypeMap = new HashMap<String, ThumbnailTypes>();
+
+ bThumbnailTypeMap.put("rounded", ThumbnailTypes.ROUNDED);//default is rounded if user doesn't specify to use square
+ bThumbnailTypeMap.put("square", ThumbnailTypes.SQUARE);
+ }
+
+ public BootstrapThumbnail(Context context, AttributeSet attrs, int defStyle)
+ {
+ super(context, attrs, defStyle);
+ initialise(attrs);
+ }
+
+ public BootstrapThumbnail(Context context, AttributeSet attrs)
+ {
+ super(context, attrs);
+ initialise(attrs);
+ }
+
+ public BootstrapThumbnail(Context context)
+ {
+ super(context);
+ initialise(null);
+ }
+
+ public void setImage(int drawable)
+ {
+ this.placeholder.setBackgroundResource(drawable);
+ invalidate();
+ requestLayout();
+ }
+
+ //set up the bootstrap types
+ private enum ThumbnailTypes
+ {
+ ROUNDED(R.drawable.bthumbnail_container_rounded, R.drawable.bthumbnail_placeholder_default),
+ SQUARE(R.drawable.bthumbnail_container_square, R.drawable.bthumbnail_placeholder_default);
+
+ private int containerDrawable;
+ private int placeholderDrawable;
+
+ ThumbnailTypes(int containerDrawable, int placeholderDrawable)
+ {
+ this.containerDrawable = containerDrawable;
+ this.placeholderDrawable = placeholderDrawable;
+ }
+ }
+
+ private void initialise( AttributeSet attrs )
+ {
+ LayoutInflater inflator = (LayoutInflater)getContext().getSystemService(
+ Context.LAYOUT_INFLATER_SERVICE);
+
+ readFont(getContext());
+
+ TypedArray a = getContext().obtainStyledAttributes(attrs,
+ R.styleable.BootstrapThumbnail);
+
+ //defaults
+ ThumbnailTypes type = null;
+ String thumbnailType = DEFAULT_TYPE;
+ String text = "";
+ int imageDrawable = 0;
+ float scale = getResources().getDisplayMetrics().density; //for padding
+ int width = DEFAULT_WIDTH;
+ int height = DEFAULT_HEIGHT;
+ int padding = 0;
+ int paddingDP = 0;
+
+ //attribute values
+ if(a.getString(R.styleable.BootstrapThumbnail_bt_width) != null) {
+ width = (int) a.getDimension(R.styleable.BootstrapThumbnail_bt_width, 0);
+ Log.v("width", Integer.toString(width));
+ }
+
+ if(a.getString(R.styleable.BootstrapThumbnail_bt_height) != null) {
+ height = (int) a.getDimension(R.styleable.BootstrapThumbnail_bt_height, 0);
+ }
+
+ if(a.getString(R.styleable.BootstrapThumbnail_bt_inside_padding) != null) {
+ paddingDP = (int) a.getDimension(R.styleable.BootstrapThumbnail_bt_inside_padding, 0);
+ }
+ else{
+ padding = (int) (((Math.sqrt(width * height)) / 100) * 2);
+ if(padding > DEFAULT_MAX_PADDING)
+ padding = DEFAULT_MAX_PADDING;
+ if(padding < DEFAULT_MIN_PADDING)
+ padding = DEFAULT_MIN_PADDING;
+
+ paddingDP = (int) (padding * scale + 0.5f);//container padding in DP
+ }
+
+ if(a.getString(R.styleable.BootstrapThumbnail_bt_roundedCorners) != null){
+ roundedCorners = a.getBoolean(R.styleable.BootstrapThumbnail_bt_roundedCorners, false) ;
+ }
+
+ if(a.getString(R.styleable.BootstrapThumbnail_bt_image) != null){
+ imageDrawable = a.getResourceId(R.styleable.BootstrapThumbnail_bt_image, 0);
+ }
+
+ a.recycle();
+
+ text = (int)(width/scale) + "x" + (int)(height/scale);
+ View v = inflator.inflate(R.layout.bootstrap_thumbnail, null, false);
+
+ //get layout items
+ container = (ViewGroup) v.findViewById(R.id.container);
+ placeholder = (LinearLayout) v.findViewById(R.id.placeholder);
+ dimensionsLabel = (TextView) v.findViewById(R.id.dimensionsLabel);
+
+ Log.v("size", "width:" + width + " height:" + height);
+
+
+ type = bThumbnailTypeMap.get(thumbnailType);
+
+ //get the correct background type
+ if(roundedCorners == true)
+ {
+ type = bThumbnailTypeMap.get("rounded");
+ } else {
+ type = bThumbnailTypeMap.get("square");
+ }
+
+ //apply the background type
+ container.setBackgroundResource(type.containerDrawable);
+
+ //if no image is provided by user
+ if(imageDrawable == 0){
+ //set default grey placeholder background
+ placeholder.setBackgroundResource(type.placeholderDrawable);
+
+ //set the text
+ if(text.length() > 0){
+ dimensionsLabel.setText(text);
+ dimensionsLabel.setVisibility(View.VISIBLE);
+ }
+ }
+ else{
+ //set background to user's provided image
+ placeholder.setBackgroundResource(imageDrawable);
+
+ //remove textview dimensions
+ dimensionsLabel.setVisibility(View.GONE);
+ }
+
+ //placeholder padding
+ int paddingP = (int) (((Math.sqrt(width * height)) / 100) * 4);
+
+ //convert to DP
+ int paddingDPP = (int) (paddingP * scale + 0.5f);//placeholder padding in DP
+
+ container.setPadding(paddingDP, paddingDP, paddingDP, paddingDP);
+ placeholder.setPadding(paddingDPP, paddingDPP, paddingDPP, paddingDPP);
+
+ placeholder.setLayoutParams(new LinearLayout.LayoutParams(width,height));
+
+ //set the font awesome icon typeface
+ dimensionsLabel.setTypeface(font);
+
+ this.setClickable(true);
+
+ addView(v);
+ }
+
+ //static class to read in font
+ private static void readFont(Context context)
+ {
+ if(font == null){
+ try {
+ font = Typeface.createFromAsset(context.getAssets(), "fontawesome-webfont.ttf");
+ } catch (Exception e) {
+ Log.e("BootstrapButton", "Could not get typeface because " + e.getMessage());
+ font = Typeface.DEFAULT;
+ }
+ }
+
+ }
+}