Advertisement
Guest User

Untitled

a guest
Jul 28th, 2016
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.85 KB | None | 0 0
  1.  
  2. import android.content.res.ColorStateList;
  3. import android.graphics.Color;
  4. import android.graphics.drawable.ColorDrawable;
  5. import android.graphics.drawable.Drawable;
  6. import android.graphics.drawable.RippleDrawable;
  7. import android.graphics.drawable.ShapeDrawable;
  8. import android.graphics.drawable.StateListDrawable;
  9. import android.graphics.drawable.shapes.RoundRectShape;
  10. import android.os.Build;
  11.  
  12. import java.util.Arrays;
  13.  
  14. public class RippleDrawableUtils {
  15. public static int lightenOrDarken(int color, double fraction) {
  16. if (canLighten(color, fraction)) {
  17. return lighten(color, fraction);
  18. } else {
  19. return darken(color, fraction);
  20. }
  21. }
  22.  
  23. private static int lighten(int color, double fraction) {
  24. int red = Color.red(color);
  25. int green = Color.green(color);
  26. int blue = Color.blue(color);
  27. red = lightenColor(red, fraction);
  28. green = lightenColor(green, fraction);
  29. blue = lightenColor(blue, fraction);
  30. int alpha = Color.alpha(color);
  31. return Color.argb(alpha, red, green, blue);
  32. }
  33.  
  34. private static int darken(int color, double fraction) {
  35. int red = Color.red(color);
  36. int green = Color.green(color);
  37. int blue = Color.blue(color);
  38. red = darkenColor(red, fraction);
  39. green = darkenColor(green, fraction);
  40. blue = darkenColor(blue, fraction);
  41. int alpha = Color.alpha(color);
  42.  
  43. return Color.argb(alpha, red, green, blue);
  44. }
  45.  
  46. private static boolean canLighten(int color, double fraction) {
  47. int red = Color.red(color);
  48. int green = Color.green(color);
  49. int blue = Color.blue(color);
  50. return canLightenComponent(red, fraction)
  51. && canLightenComponent(green, fraction)
  52. && canLightenComponent(blue, fraction);
  53. }
  54.  
  55. private static boolean canLightenComponent(int colorComponent, double fraction) {
  56. int red = Color.red(colorComponent);
  57. int green = Color.green(colorComponent);
  58. int blue = Color.blue(colorComponent);
  59. return red + (red * fraction) < 255
  60. && green + (green * fraction) < 255
  61. && blue + (blue * fraction) < 255;
  62. }
  63.  
  64. private static int darkenColor(int color, double fraction) {
  65. return (int) Math.max(color - (color * fraction), 0);
  66. }
  67.  
  68. private static int lightenColor(int color, double fraction) {
  69. return (int) Math.min(color + (color * fraction), 255);
  70. }
  71.  
  72. private static Drawable getRippleColor(int color){
  73. float[] outerRadii =new float[8];
  74. Arrays.fill(outerRadii,3);
  75. RoundRectShape r =new RoundRectShape(outerRadii,null,null);
  76. ShapeDrawable shapeDrawable=new ShapeDrawable(r);
  77. shapeDrawable.getPaint().setColor(color);
  78. return shapeDrawable;
  79. }
  80.  
  81.  
  82. public static Drawable getSelectableDrawableFor(int color){
  83. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
  84. ColorStateList pressColor =ColorStateList.valueOf(lightenColor(color,0.2D));
  85. ColorDrawable defaultColor = new ColorDrawable(color);
  86. Drawable rippleColor = getRippleColor(color);
  87. return new RippleDrawable(pressColor,defaultColor,rippleColor);
  88. }
  89. else {
  90. StateListDrawable stateListDrawable = new StateListDrawable();
  91. stateListDrawable.addState(
  92. new int[]{android.R.attr.state_pressed},
  93. new ColorDrawable(lightenOrDarken(color, 0.20D))
  94. );
  95. stateListDrawable.addState(
  96. new int[]{android.R.attr.state_focused},
  97. new ColorDrawable(lightenOrDarken(color, 0.40D))
  98. );
  99. stateListDrawable.addState(
  100. new int[]{},
  101. new ColorDrawable(color)
  102. );
  103. return stateListDrawable;
  104. }
  105. }
  106. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement