aboutsummaryrefslogtreecommitdiffstats
path: root/libraries/AndroidBootstrap/src/com/beardedhen/androidbootstrap/BootstrapCircleThumbnail.java
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/AndroidBootstrap/src/com/beardedhen/androidbootstrap/BootstrapCircleThumbnail.java')
-rw-r--r--libraries/AndroidBootstrap/src/com/beardedhen/androidbootstrap/BootstrapCircleThumbnail.java215
1 files changed, 215 insertions, 0 deletions
diff --git a/libraries/AndroidBootstrap/src/com/beardedhen/androidbootstrap/BootstrapCircleThumbnail.java b/libraries/AndroidBootstrap/src/com/beardedhen/androidbootstrap/BootstrapCircleThumbnail.java
new file mode 100644
index 000000000..1eb353770
--- /dev/null
+++ b/libraries/AndroidBootstrap/src/com/beardedhen/androidbootstrap/BootstrapCircleThumbnail.java
@@ -0,0 +1,215 @@
+package com.beardedhen.androidbootstrap;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.util.AttributeSet;
+import android.util.DisplayMetrics;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import com.beardedhen.androidbootstrap.utils.ImageUtils;
+
+public class BootstrapCircleThumbnail extends FrameLayout
+{
+ private static final int PADDING_SMALL = 4;
+ private static final int PADDING_MEDIUM = 4;
+ private static final int PADDING_LARGE = 6;
+ private static final int PADDING_XLARGE = 8;
+
+ private static final int SIZE_SMALL = 48; //dp total size (outer circle)
+ private static final int SIZE_MEDIUM = 80;//dp
+ private static final int SIZE_LARGE = 112;//dp
+ private static final int SIZE_XLARGE = 176;//dp
+ private static final int SIZE_DEFAULT = SIZE_MEDIUM;
+
+ private static final String SMALL = "small";
+ private static final String MEDIUM = "medium";
+ private static final String LARGE = "large";
+ private static final String XLARGE = "xlarge";
+
+ private LinearLayout container;
+ private LinearLayout placeholder;
+ private ImageView image;
+ private TextView dimensionsLabel;
+ private String size = MEDIUM;
+ private boolean minimal = false;//minimal means display just the image, no padding
+ private String text = "";
+ private int imageWidth = SIZE_DEFAULT;
+ private int imageHeight = SIZE_DEFAULT;
+ private int padding = 0;
+
+ public BootstrapCircleThumbnail(Context context, AttributeSet attrs, int defStyle)
+ {
+ super(context, attrs, defStyle);
+ initialise(attrs);
+ }
+
+ public BootstrapCircleThumbnail(Context context, AttributeSet attrs)
+ {
+ super(context, attrs);
+ initialise(attrs);
+ }
+
+ public BootstrapCircleThumbnail(Context context)
+ {
+ super(context);
+ initialise(null);
+ }
+
+ private void initialise( AttributeSet attrs )
+ {
+ LayoutInflater inflator = (LayoutInflater)getContext().getSystemService(
+ Context.LAYOUT_INFLATER_SERVICE);
+
+
+ TypedArray a = getContext().obtainStyledAttributes(attrs,
+ R.styleable.BootstrapCircleThumbnail);
+
+
+ int imageDrawable = 0;
+
+ if(a.getString(R.styleable.BootstrapCircleThumbnail_bct_image) != null)
+ {
+ imageDrawable = a.getResourceId(R.styleable.BootstrapCircleThumbnail_bct_image, 0);
+
+ }
+
+ if(a.getString(R.styleable.BootstrapCircleThumbnail_android_text) != null)
+ {
+ text = a.getString(R.styleable.BootstrapCircleThumbnail_android_text);
+ }
+
+ if(a.getString(R.styleable.BootstrapCircleThumbnail_bct_size) != null)
+ {
+ this.size = a.getString(R.styleable.BootstrapCircleThumbnail_bct_size);
+ }
+
+ if(a.getString(R.styleable.BootstrapCircleThumbnail_bct_minimal) != null)
+ {
+ this.minimal = a.getBoolean(R.styleable.BootstrapCircleThumbnail_bct_minimal, false);
+ }
+
+ a.recycle();
+
+ View v = inflator.inflate(R.layout.bootstrap_thumbnail_circle, null, false);
+ dimensionsLabel = (TextView) v.findViewById(R.id.dimensionsLabel);
+ container = (LinearLayout) v.findViewById(R.id.container);
+ placeholder = (LinearLayout) v.findViewById(R.id.placeholder);
+ image = (ImageView) v.findViewById(R.id.image);
+ float scale = getResources().getDisplayMetrics().density;
+
+
+
+ //small image
+ if(this.size.equals(SMALL))
+ {
+ padding = PADDING_SMALL;
+ imageWidth = SIZE_SMALL;
+ imageHeight = SIZE_SMALL;
+
+ }
+ else if(this.size.equals(MEDIUM))
+ {
+ padding = PADDING_MEDIUM;
+ imageWidth = SIZE_MEDIUM;
+ imageHeight = SIZE_MEDIUM;
+ }
+ else if(this.size.equals(LARGE))
+ {
+ padding = PADDING_LARGE;
+ imageWidth = SIZE_LARGE;
+ imageHeight = SIZE_LARGE;
+ }
+ else if(this.size.equals(XLARGE))
+ {
+ padding = PADDING_XLARGE;
+ imageWidth = SIZE_XLARGE;
+ imageHeight = SIZE_XLARGE;
+ }
+ //no valid size is given, set image to default size
+ else
+ {
+ padding = PADDING_MEDIUM;
+ imageWidth = SIZE_DEFAULT;
+ imageHeight = SIZE_DEFAULT;
+ }
+
+ //convert padding to pixels
+ DisplayMetrics displayMetrics = getContext().getResources().getDisplayMetrics();
+ int paddingPX = (int)((padding * scale) + 0.5);
+
+ //convert image size to pixels
+ int imageSizeWidthPX = (int)((imageWidth * scale) + 0.5);
+ int imageSizeHeightPX = (int)((imageHeight * scale) + 0.5);
+
+ //make inner image smaller to compensate for the padding so that entire circle including padding equals the size
+ //ex. small image = 48dp, small padding = 4dp, inner image = 48 - (4 * 2) = 40
+ if(this.minimal == false)
+ {
+ imageSizeWidthPX = imageSizeWidthPX - (paddingPX * 2);
+ imageSizeHeightPX = imageSizeHeightPX - (paddingPX * 2);
+
+ this.container.setPadding(paddingPX, paddingPX, paddingPX, paddingPX);
+ container.setBackgroundResource(R.drawable.thumbnail_circle_container);
+ }
+ else
+ {
+ container.setBackgroundResource(R.drawable.thumbnail_circle_minimal);
+ }
+
+ //if no image is given
+ if(imageDrawable == 0)
+ {
+ this.image.setVisibility(View.GONE);
+ placeholder.setLayoutParams(new LinearLayout.LayoutParams(imageSizeWidthPX, imageSizeHeightPX));
+ placeholder.setPadding(paddingPX, paddingPX, paddingPX, paddingPX);
+
+ //set placeholder image
+ placeholder.setBackgroundResource(R.drawable.thumbnail_circle);
+
+ this.dimensionsLabel.setText(text);
+ }
+ else
+ {
+ placeholder.setPadding(0, 0, 0, 0);
+ this.dimensionsLabel.setVisibility(View.GONE);
+ Bitmap bitmap = BitmapFactory.decodeResource(getContext().getResources(), imageDrawable);
+
+ Bitmap roundBitmap = ImageUtils.getCircleBitmap(bitmap, imageSizeWidthPX, imageSizeHeightPX);
+ image.setImageBitmap(roundBitmap);
+ }
+
+ this.addView(v);
+ }
+
+ public void setImage(int drawable)
+ {
+ Bitmap bitmap = BitmapFactory.decodeResource(getContext().getResources(), drawable);
+
+ float scale = getResources().getDisplayMetrics().density;
+
+ //convert image size to pixels
+ int widthPX = (int)((this.imageWidth * scale) + 0.5);
+ int heightPX = (int)((this.imageHeight * scale) + 0.5);
+
+ int paddingPX = (int)((this.padding * scale) + 0.5);
+
+ if(this.minimal == false)
+ {
+ widthPX = widthPX - (paddingPX * 2);
+ heightPX = heightPX - (paddingPX * 2);
+ }
+
+ Bitmap roundBitmap = ImageUtils.getCircleBitmap(bitmap, widthPX, heightPX);
+ image.setImageBitmap(roundBitmap);
+
+ invalidate();
+ requestLayout();
+ }
+}