Skip to content

Instantly share code, notes, and snippets.

@sharish
Created July 25, 2015 11:18
Show Gist options
  • Save sharish/4f37021b1216f773daf8 to your computer and use it in GitHub Desktop.
Save sharish/4f37021b1216f773daf8 to your computer and use it in GitHub Desktop.
package com.cooltechworks.materialcolorshades;
import android.graphics.Color;
/**
* Created by sharish on 02/07/15.
*/
/**
* Color shades will provide all the intermediate colors between two colors. It just requires a decimal value between 0.0 to 1.0
* and it provides the exact shade combination of the two color with this shade value.
*
* Textual explanation :
*
* |===============|===============|===============|===============|
* White LtGray Gray DkGray Black
*
* 0 0.25 0.5 0.75 1
*
* Given two colors as White and Black,
* and shade
* as 0 gives White
* as 0.25 gives Light gray
* as 0.5 gives Gray
* as 0.75 gives Dark gray
* as 1 gives Black.
*
*/
public class ColorShades {
private int mFromColor;
private int mToColor;
private float mShade;
public ColorShades setFromColor(int fromColor) {
this.mFromColor = fromColor;
return this;
}
public ColorShades setToColor(int toColor) {
this.mToColor = toColor;
return this;
}
public ColorShades setFromColor(String fromColor) {
this.mFromColor = Color.parseColor(fromColor);
return this;
}
public ColorShades setToColor(String toColor) {
this.mToColor = Color.parseColor(toColor);
return this;
}
public ColorShades forLightShade(int color) {
setFromColor(Color.WHITE);
setToColor(color);
return this;
}
public ColorShades forDarkShare(int color) {
setFromColor(color);
setToColor(Color.BLACK);
return this;
}
public ColorShades setShade(float mShade) {
this.mShade = mShade;
return this;
}
/**
* Generates the shade for the given color.
* @return the int value of the shade.
*/
public int generate() {
int fromR = (Color.red(mFromColor));
int fromG = (Color.green(mFromColor));
int fromB = (Color.blue(mFromColor));
int toR = (Color.red(mToColor));
int toG = (Color.green(mToColor));
int toB = (Color.blue(mToColor));
int diffR = toR - fromR;
int diffG = toG - fromG;
int diffB = toB - fromB;
int R = fromR + (int) (( diffR * mShade));
int G = fromG + (int) (( diffG * mShade));
int B = fromB + (int) (( diffB * mShade));
return Color.rgb(R, G, B);
}
/**
* Assumes the from and to color are inverted before generating the shade.
* @return the int value of the inverted shade.
*/
public int generateInverted() {
int fromR = (Color.red(mFromColor));
int fromG = (Color.green(mFromColor));
int fromB = (Color.blue(mFromColor));
int toR = (Color.red(mToColor));
int toG = (Color.green(mToColor));
int toB = (Color.blue(mToColor));
int diffR = toR - fromR;
int diffG = toG - fromG;
int diffB = toB - fromB;
int R = toR - (int) (( diffR * mShade));
int G = toG - (int) (( diffG * mShade));
int B = toB - (int) (( diffB * mShade));
return Color.rgb(R, G, B);
}
/**
* Gets the String equivalent of the generated shade
* @return String value of the shade
*/
public String generateInvertedString() {
return String.format("#%06X", 0xFFFFFF & generateInverted());
}
/**
* Gets the inverted String equivalent of the generated shade
* @return String value of the shade
*/
public String generateString() {
return String.format("#%06X", 0xFFFFFF & generate());
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment