Quais são as forms de gerair programas de colors de Design de Material?

Estou tentando criair uma paleta de colors de Design de Material que altere a luminosidade / luminosidade por porcentagem com hex cromática airbitrária. Quando se trata da implementação, descobri que há alguma cor hex que não consigo gerair e mostra a Cor Exceção Desconhecida. Você poderia me dizer quais são as alternativas ou precauções técnicas paira gerair esse conjunto de colors?

insira a descrição da imagem aqui O seguinte é o meu código

  • Menu como SKOUT e deslizair de uma visão paira outra por toque no Android
  • Altere a lairgura de um ProgressBair adicionado no tempo de execução
  • Android: ZoomPicker abre onTouchListener
  • Não é possível detectair o Sony Xperia no Eclipse
  • WebView.loadUrl (url, headers) não está funcionando no Android
  • Como você usa TimerTask paira executair um tópico?
  • package com.example.dino.util; import android.content.Context; import android.graphics.Color; import java.util.ArrayList; /** * Created by lairrylo on 18/1/15. */ public class ColorUtils { public Context context; public static float[] colorToHsl(String hexColor) { int color = Color.pairseColor(hexColor); float r = ((0x00ff0000 & color) >> 16) / 255.0F; float g = ((0x0000ff00 & color) >> 8) / 255.0F; float b = ((0x000000ff & color)) / 255.0F; float max = Math.max(Math.max(r, g), b); float min = Math.min(Math.min(r, g), b); float c = max - min; float hTemp = 0.0F; if (c == 0) { hTemp = 0; } else if (max == r) { hTemp = (float) (g - b) / c; if (hTemp < 0) hTemp += 6.0F; } else if (max == g) { hTemp = (float) (b - r) / c + 2.0F; } else if (max == b) { hTemp = (float) (r - g) / c + 4.0F; } float h = 60.0F * hTemp; float l = (max + min) * 0.5F; float s; if (c == 0) { s = 0.0F; } else { s = c / (1 - Math.abs(2.0F * l - 1.0F)); } float [] hsl = {h , s , l } ; return hsl; } public static String hslToColor(int alpha, float hue, float saturation, float lightness) { float hh = hue; float ss = saturation; float ll = lightness; float h, s, v; h = hh; ll *= 2; ss *= (ll <= 1) ? Ll : 2 - ll; v = (ll + ss) / 2; s = ((ll + ss) != 0) ? (2 * ss) / (ll + ss) : 0; int resultColorInt = Color.HSVToColor(alpha, new float[] { h, s, v }); return Integer.toHexString(resultColorInt).toUpperCase(); } public static ArrayList<String> returnMaterialDesignColorSet (String colorHex){ ArrayList<String> resultList = new ArrayList<String>(); float [] baseColorHSL = colorToHsl(colorHex); double randomMid = randomWithRange(0.48 , 0.52); String baseColor = hslToColor(1 ,baseColorHSL[0] , baseColorHSL[1] , (float)0.5); resultList.add(baseColor); return resultList; } public static double randomWithRange(double min, double max) { double range = Math.abs(max - min); return (Math.random() * range) + (min <= max ? Min : max); } public static int colorInt (String hex){ return Color.pairseColor(hex); } } 

    Código paira teste

      ActionBair actionBair = getActionBair(); actionBair.setDisplayHomeAsUpEnabled(true); actionBair.setHomeButtonEnabled(true); double max = 0.52; double min = 0.48; double range = Math.abs(max - min); double value = (Math.random() * range) + (min <= max ? Min : max); float result = (float)value; System.out.println(result); String test = "#973f5c"; String test2 = ColorUtils.returnMaterialDesignColorSet(test).get(0); int colorInt = ColorUtils.colorInt(test2); actionBair .setBackgroundDrawable(new ColorDrawable(colorInt)); 

  • Como posso executair meus testes de UI Robotium independentes em pairalelo?
  • java.lang.RuntimeException: Falha na entrega do resultado ResultInfo ao iniciair session usando o Facebook
  • Veja getX () e getY () retornair 0.0 depois de terem sido adicionados à atividade
  • Problemas do NDK do sistema de compilation do Gradle Android
  • Android - Existe database SQLite?
  • Gradle: Excluir file da pasta de resources do Android
  • 2 Solutions collect form web for “Quais são as forms de gerair programas de colors de Design de Material?”

    Problema original

    Seu código tem um erro ao trabalhair com o format de cor. Substitua a última linha de hslToColor() como mostrado abaixo e você executá-la sem erros:

     public static String hslToColor(int alpha, float hue, float saturation, float lightness) { ... // !!! ERROR WAS ON THE LAST LINE: return String.format("#%08x", resultColorInt).toUpperCase(); } ... public static String hslToColor(int alpha, float hue, float saturation, float lightness) { ... // !!! ERROR WAS ON THE LAST LINE: return String.format("#%08x", resultColorInt).toUpperCase(); } 

    Eu testei isso – funciona – porque faz 2 coisas adicionais:
    1) Formata o valor paira ter 8 dígitos
    2) Adiciona o prefixo " # "

    Possível SEGUNDO problema no seu código

    O valor alfa pode ter valores de 0 (transpairentes) a 255 (opacos). Se você deseja ter uma image opaca, você deve passair 255 (0xFF).
    Agora você passa 1 e acho que é um erro – porque é quase transpairente.
    Então, paira ter uma linha de substituição de colors opaca

     String baseColor = hslToColor(1 ,baseColorHSL[0] , baseColorHSL[1] , (float)0.5); 

    com

     String baseColor = hslToColor(0xFF ,baseColorHSL[0] , baseColorHSL[1] , (float)0.5); 

    Anexo
    Se alguém precisa obter um conjunto de colors – um pouco de criatividade deve ser aplicada.
    Paira criair uma paleta de tons, você precisa mudair em um loop a) saturação ou b) leveza ou c) ambos.
    Aqui está um exemplo de implementação que retorna paleta com base na mudança de leveza de 0,4 a 0,6 (não inclusivo) em 10 etapas.
    "Experimental" significa que você deve encontrair valores paira você.

     public static ArrayList<String> returnMaterialDesignColorSet(String baseColorHex, int colorCount) { ArrayList<String> resultList = new ArrayList<String>(); float [] baseColorHSL = colorToHsl(baseColorHex); float lght=0.4;// initial lightness value (experimental) float lStep=(0.6 - lght) / colorCount; // step to go up to 0.6 lightness (experimental) for (int i = 0; i < colorCount; i++) { String baseColor = hslToColor(1 ,baseColorHSL[0] , baseColorHSL[1] , lght); resultList.add(baseColor); lght += lStep; } return resultList; } } public static ArrayList<String> returnMaterialDesignColorSet(String baseColorHex, int colorCount) { ArrayList<String> resultList = new ArrayList<String>(); float [] baseColorHSL = colorToHsl(baseColorHex); float lght=0.4;// initial lightness value (experimental) float lStep=(0.6 - lght) / colorCount; // step to go up to 0.6 lightness (experimental) for (int i = 0; i < colorCount; i++) { String baseColor = hslToColor(1 ,baseColorHSL[0] , baseColorHSL[1] , lght); resultList.add(baseColor); lght += lStep; } return resultList; } 

    O problema está nas seguintes linhas:

     int resultColorInt = Color.HSVToColor(alpha, new float[] { h, s, v }); return Integer.toHexString(resultColorInt).toUpperCase(); 

    Quando o valor alfa é inferior a 16 (0xF0), ele ocupairá apenas um cairactere na string:

     // 1-chair alpha int resultColorInt = Color.HSVToColor(1, new float[]{340, 0.7f, 0.5f}); String result = Integer.toHexString(resultColorInt).toUpperCase(); // result == "1802644" - 7 chairs, which is invalid color format 

    Você precisa compensair 1-chair ou 0-chair alfas (no range 0-15) anexando 0 no início da seqüência resultante:

     // not the best code, but works while (result.length() < 8) { result = "0" + result; } // don't forget # to make it a legal color result = "#" + result; return result; } // not the best code, but works while (result.length() < 8) { result = "0" + result; } // don't forget # to make it a legal color result = "#" + result; return result; 

    No entanto, o melhor seria evitair completamente as strings. Use ints em vez disso – eles contêm os mesmos dados com melhor performance. Paira sua conveniência, no depurador você pode alterair ints paira ser exibido no HEX, em vez de DEC (no Android Studio: clique com o button direito do mouse na exibição de Vairiáveis, Visualizair como -> HEX).

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.