aboutsummaryrefslogtreecommitdiffstats
path: root/libraries/AndroidBootstrap/src/com/beardedhen/androidbootstrap/FontAwesomeText.java
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/AndroidBootstrap/src/com/beardedhen/androidbootstrap/FontAwesomeText.java')
-rw-r--r--libraries/AndroidBootstrap/src/com/beardedhen/androidbootstrap/FontAwesomeText.java274
1 files changed, 274 insertions, 0 deletions
diff --git a/libraries/AndroidBootstrap/src/com/beardedhen/androidbootstrap/FontAwesomeText.java b/libraries/AndroidBootstrap/src/com/beardedhen/androidbootstrap/FontAwesomeText.java
new file mode 100644
index 000000000..75a130c5a
--- /dev/null
+++ b/libraries/AndroidBootstrap/src/com/beardedhen/androidbootstrap/FontAwesomeText.java
@@ -0,0 +1,274 @@
+package com.beardedhen.androidbootstrap;
+
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.Typeface;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.util.TypedValue;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.animation.AlphaAnimation;
+import android.view.animation.Animation;
+import android.view.animation.LinearInterpolator;
+import android.view.animation.RotateAnimation;
+import android.widget.FrameLayout;
+import android.widget.TextView;
+
+import com.beardedhen.androidbootstrap.R;
+
+public class FontAwesomeText extends FrameLayout {
+
+ private static Typeface font;
+ private static Map<String, String> faMap;
+
+ private TextView tv;
+
+ private static final String FA_ICON_QUESTION = "fa-question";
+
+ public enum AnimationSpeed
+ {
+ FAST,
+ MEDIUM,
+ SLOW;
+ }
+
+ static{
+ faMap = FontAwesome.getFaMap();
+ }
+
+ public FontAwesomeText(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+ initialise(attrs);
+ }
+
+ public FontAwesomeText(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ initialise(attrs);
+ }
+
+ public FontAwesomeText(Context context) {
+ super(context);
+ initialise(null);
+ }
+
+
+
+
+ private void initialise( AttributeSet attrs )
+ {
+ LayoutInflater inflator = (LayoutInflater)getContext().getSystemService(
+ Context.LAYOUT_INFLATER_SERVICE);
+
+ //get font
+ readFont(getContext());
+
+ TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.FontAwesomeText);
+
+ //inflate the view
+ View fontAwesomeTextView = inflator.inflate(R.layout.font_awesome_text, null, false);
+ tv = (TextView)fontAwesomeTextView.findViewById(R.id.lblText);
+
+ String icon = "";
+ float fontSize = 14.0f;
+
+ //icon
+ if (a.getString(R.styleable.FontAwesomeText_fa_icon) != null) {
+ icon = a.getString(R.styleable.FontAwesomeText_fa_icon);
+ }
+
+ //font size
+ if (a.getString(R.styleable.FontAwesomeText_android_textSize) != null) {
+
+ String xmlProvidedSize = attrs.getAttributeValue(
+ "http://schemas.android.com/apk/res/android", "textSize");
+ final Pattern PATTERN_FONT_SIZE = Pattern
+ .compile("([0-9]+[.]?[0-9]*)sp");
+ Matcher m = PATTERN_FONT_SIZE.matcher(xmlProvidedSize);
+
+ if (m.find()) {
+ if (m.groupCount() == 1) {
+ fontSize = Float.valueOf(m.group(1));
+ }
+ }
+ }
+
+ //text colour
+ if(a.getString(R.styleable.FontAwesomeText_android_textColor) != null){
+ tv.setTextColor(a.getColor(R.styleable.FontAwesomeText_android_textColor, R.color.bbutton_inverse));
+ }
+
+ setIcon(icon);
+
+ tv.setTypeface(font);
+ tv.setTextSize(TypedValue.COMPLEX_UNIT_SP, fontSize);
+
+ a.recycle();
+ addView(fontAwesomeTextView);
+ }
+
+ private static void readFont(Context context)
+ {
+
+ if(font == null){
+ try {
+ font = Typeface.createFromAsset(context.getAssets(), "fontawesome-webfont.ttf");
+ } catch (Exception e) {
+ Log.e("BButton", "Could not get typeface because " + e.getMessage());
+ font = Typeface.DEFAULT;
+ }
+ }
+
+ }
+
+
+ /**
+ * Used to start flashing a FontAwesomeText item
+ * @param context the current applications context
+ * @param forever whether the item should flash repeatedly or just once
+ * @param speed how fast the item should flash, chose between FontAwesomeText.AnimationSpeed.SLOW /
+ * FontAwesomeText.AnimationSpeed.MEDIUM / FontAwesomeText.AnimationSpeed.FAST
+ */
+ public void startFlashing(Context context, boolean forever, AnimationSpeed speed)
+ {
+
+ Animation fadeIn = new AlphaAnimation(0, 1);
+
+ //set up extra variables
+ fadeIn.setDuration(50);
+ fadeIn.setRepeatMode(Animation.REVERSE);
+
+ //default repeat count is 0, however if user wants, set it up to be infinite
+ fadeIn.setRepeatCount(0);
+ if (forever){
+ fadeIn.setRepeatCount(Animation.INFINITE);
+ }
+
+ //default speed
+ fadeIn.setStartOffset(1000);
+
+ //fast
+ if (speed.equals(AnimationSpeed.FAST))
+ {
+ fadeIn.setStartOffset(200);
+ }
+
+ //medium
+ if (speed.equals(AnimationSpeed.MEDIUM))
+ {
+ fadeIn.setStartOffset(500);
+ }
+
+ //set the new animation to a final animation
+ final Animation animation = fadeIn;
+
+ //run the animation - used to work correctly on older devices
+ tv.postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ tv.startAnimation(animation);
+ }
+ }, 100);
+ }
+
+
+ /**
+ * Used to start rotating a FontAwesomeText item
+ * @param context the current applications context
+ * @param clockwise true for clockwise, false for anti clockwise spinning
+ * @param speed how fast the item should flash, chose between FontAwesomeText.AnimationSpeed.SLOW /
+ * FontAwesomeText.AnimationSpeed.MEDIUM / FontAwesomeText.AnimationSpeed.FAST
+ */
+ public void startRotate(Context context, boolean clockwise, AnimationSpeed speed)
+ {
+ Animation rotate;
+
+ //set up the rotation animation
+ if (clockwise){
+ rotate = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,0.5f);
+ } else {
+ rotate = new RotateAnimation(360, 0, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,0.5f);
+ }
+
+ //set up some extra variables
+ rotate.setRepeatCount(Animation.INFINITE);
+ rotate.setInterpolator(new LinearInterpolator());
+ rotate.setStartOffset(0);
+ rotate.setRepeatMode(Animation.RESTART);
+
+ //defaults
+ rotate.setDuration(2000);
+
+ //fast
+ if (speed.equals(AnimationSpeed.FAST))
+ {
+ rotate.setDuration(500);
+ }
+
+ //medium
+ if (speed.equals(AnimationSpeed.MEDIUM))
+ {
+ rotate.setDuration(1000);
+ }
+
+ //send the new animation to a final animation
+ final Animation animation = rotate;
+
+ //run the animation - used to work correctly on older devices
+ tv.postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ tv.startAnimation(animation);
+ }
+ }, 100);
+
+ }
+
+
+ /**
+ * Used to stop animating any FontAwesomeText item
+ */
+ public void stopAnimation(){
+ //stop the animation
+ tv.clearAnimation();
+ }
+
+
+ /**
+ * Used to set the icon for a FontAwesomeText item
+ * @param faIcon - String value for the icon as per http://fortawesome.github.io/Font-Awesome/cheatsheet/
+ */
+ public void setIcon(String faIcon) {
+
+ String icon = faMap.get(faIcon);
+
+ if (icon == null)
+ {
+ icon = faMap.get(FA_ICON_QUESTION);
+ }
+
+ tv.setText(icon);
+ }
+
+ /**
+ * Used to set the text color of the underlying text view.
+ * @param color - Integer value representing a color resource.
+ */
+ public void setTextColor(int color) {
+ tv.setTextColor(color);
+ }
+
+ /**
+ * Used to set the text size of the underlying text view.
+ * @param unit - Integer value representing a unit size
+ * @param size - Float value representing text size
+ */
+ public void setTextSize(int unit, float size) {
+ tv.setTextSize(unit, size);
+ }
+
+}