//package br.com.tecnove.random.android.util;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Random;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.LayoutAnimationController;
import android.view.animation.TranslateAnimation;
import android.widget.ScrollView;
import android.widget.TextView;
/**
* @author "Carlos Eduardo Ruhrwiem"
*
*/
public class AnimationUtil {
private final static int RUNNING_VALUES = 50;
private final static String[] SPINNING = new String[] { "-", "/", "|", "\\" };
private final static Animation anim_TL = new TranslateAnimation(Animation.RELATIVE_TO_SELF, -1.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, -1.0f, Animation.RELATIVE_TO_SELF, 0.0f);
private final static Animation anim_T = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, -1.0f, Animation.RELATIVE_TO_SELF, 0.0f);
private final static Animation anim_TR = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 1.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, -1.0f, Animation.RELATIVE_TO_SELF, 0.0f);
private final static Animation anim_R = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 1.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f);
private final static Animation anim_BR = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 1.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 1.0f, Animation.RELATIVE_TO_SELF, 0.0f);
private final static Animation anim_B = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 1.0f, Animation.RELATIVE_TO_SELF, 0.0f);
private final static Animation anim_BL = new TranslateAnimation(Animation.RELATIVE_TO_SELF, -1.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 1.0f, Animation.RELATIVE_TO_SELF, 0.0f);
private final static Animation anim_L = new TranslateAnimation(Animation.RELATIVE_TO_SELF, -1.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f);
private final static Animation[] animations = new Animation[]{anim_TL, anim_T,anim_TR, anim_R, anim_BR, anim_B, anim_BL, anim_L};
public static String[] getValuesForAnimation(int min, int max) {
String[] returnValues = new String[RUNNING_VALUES];
for (int i = 0; i < RUNNING_VALUES; i++) {
returnValues[i] = String.valueOf(RandomGenerator.generateFromRange(min, max));
}
return returnValues;
}
public static String[] generateAnimationString(String[] inputArray) {
String[] returnValue = new String[inputArray.length];
int animationIndex = 0;
for (int j = 0; j < inputArray.length; j++) {
returnValue[j] = SPINNING[animationIndex] + " " + inputArray[j] + " " + SPINNING[animationIndex];
animationIndex++;
}
return returnValue;
}
public static Animation getRandomDirectionAnimation(){
return animations[RandomGenerator.generateFromRange(0, 7)];
}
/**
* This should be improved. But it works right now.
* @param values
* @param outView
* @param animatedText
*/
public static void animateTextView(String result, ScrollView outView, TextView animatedText) {
animatedText.setText(result);
AnimationSet set = new AnimationSet(true);
Animation animation = new AlphaAnimation(0.0f, 1.0f);
animation.setDuration(500);
set.addAnimation(animation);
animation = AnimationUtil.getRandomDirectionAnimation();
animation.setDuration(1000);
set.addAnimation(animation);
LayoutAnimationController controller = new LayoutAnimationController(set, 0.25f);
outView.setLayoutAnimation(controller);
}
}
class RandomGenerator {
private static final Random r = new Random();
/**
* Random a value from a specified range
*
* @param min
* minimun range (inclusive)
* @param max
* maximun range (inclusive)
* @return randomed int value
*/
public static int generateFromRange(int min, int max) {
// swap values if they come in the wrong order
if (min > max) {
int aux = min;
min = max;
max = aux;
}
int i = max - min;
int x = r.nextInt(i + 1);
return x + min;
}
/**
* Random a value from a string vector
*
* @param input
* String[] containing all the possible values
* @return randomed String value
*/
public static String generateFromStringArray(String[] input) {
int i = generateFromRange(0, input.length - 1);
return input[i];
}
/**
* Random a value from a string collection. Just a facilitator for the generateFromStringArray
*
* @param input
* Collection of String that contains the possible values
* @return randomed String value
*/
public static String generateFromStringCollection(Collection input) {
return generateFromStringArray((String[]) input.toArray());
}
/**
* Generate a random upercase char
*
* @return randomed char
*/
public static char generateLetter() {
return (char) generateFromRange((int) 'A', (int) 'Z');
}
/**
* Generate random numbers for a lottery
* @param maxRange limit the range from 1 to this number (included)
* @param numbersToGenerate how many numbers will be generated
* @return List of Integers with the non repeating values
*/
public static List generateLottery(Integer maxRange, Integer numbersToGenerate) {
List numbersGenerated = new ArrayList();
for (int c = 0; c < numbersToGenerate; c++) {
int nGenerated = 0;
do {
nGenerated = r.nextInt(maxRange);
// adding +1 to make the int start at 1 and the maxRange be included in the sorted values
nGenerated++;
// if the number is allready on the list, sort a new number
} while (numbersGenerated.contains(nGenerated));
numbersGenerated.add(nGenerated);
}
return numbersGenerated;
}
/**
* Random a value from a string with values separated by '/'
* @param valor
* @return
*/
public static String generateFromString(String valor) {
// the input must be like: curitiba/fortaleza/google/facebook/android/motorola
String[] vetor = valor.split("/");
String outValue = "";
if (vetor.length>0){
outValue = vetor[r.nextInt(vetor.length)];
}
return outValue;
}
}