Criando cor aleatória em Java?

Eu quero desenhar pontos coloridos randoms em um JPanel em um aplicativo Java. Existe algum método para criar colors aleatórias?

Use a biblioteca aleatória:

import java.util.Random; 

Em seguida, crie um gerador random:

 Random rand = new Random(); 

Como as colors são separadas em verde e azul vermelho, você pode criar uma nova cor aleatória criando colors primárias aleatórias:

 // Java 'Color' class takes 3 floats, from 0 to 1. float r = rand.nextFloat(); float g = rand.nextFloat(); float b = rand.nextFloat(); 

Então, para finalmente criar a cor, passe as colors primárias para o construtor:

 Color randomColor = new Color(r, g, b); 

Você também pode criar diferentes efeitos randoms usando esse método, como criar colors aleatórias com mais ênfase em certas colors … passar em menos verde e azul para produzir uma cor aleatória “mais rosada”.

 // Will produce a random colour with more red in it (usually "pink-ish") float r = rand.nextFloat(); float g = rand.nextFloat() / 2f; float b = rand.nextFloat() / 2f; 

Ou, para garantir que apenas colors “claras” sejam geradas, você pode gerar colors que são sempre> 0,5 de cada elemento de cor:

 // Will produce only bright / light colours: float r = rand.nextFloat() / 2f + 0.5; float g = rand.nextFloat() / 2f + 0.5; float b = rand.nextFloat() / 2f + 0.5; 

Existem várias outras funções de cor que podem ser usadas com a class Color , como tornar a cor mais clara:

 randomColor.brighter(); 

Uma visão geral da class Color pode ser lida aqui: http://download.oracle.com/javase/6/docs/api/java/awt/Color.html

Um one-liner para valores RGB randoms:

 new Color((int)(Math.random() * 0x1000000)) 

Se você quiser colors pastel agradáveis, é melhor usar o sistema HLS.

 final float hue = random.nextFloat(); // Saturation between 0.1 and 0.3 final float saturation = (random.nextInt(2000) + 1000) / 10000f; final float luminance = 0.9f; final Color color = Color.getHSBColor(hue, saturation, luminance); 

Copie e cole isto para colors shinys do arco-íris pastel

 int R = (int)(Math.random()*256); int G = (int)(Math.random()*256); int B= (int)(Math.random()*256); Color color = new Color(R, G, B); //random color, but can be bright or dull //to get rainbow, pastel colors Random random = new Random(); final float hue = random.nextFloat(); final float saturation = 0.9f;//1.0 for brilliant, 0.0 for dull final float luminance = 1.0f; //1.0 for brighter, 0.0 for black color = Color.getHSBColor(hue, saturation, luminance); 

Se você não quer que pareça horrível, sugiro definir uma lista de colors em uma matriz e, em seguida, usar um gerador de números randoms para escolher uma.

Se você quiser uma cor realmente aleatória, pode gerar apenas 3 números randoms de 0 a 255 e, em seguida, usar o construtor Color (int, int, int) para criar uma nova instância Color.

 Random randomGenerator = new Random(); int red = randomGenerator.nextInt(256); int green = randomGenerator.nextInt(256); int blue = randomGenerator.nextInt(256); Color randomColour = new Color(red,green,blue); 

Eu sei que é um pouco tarde para esta resposta, mas eu não vi ninguém colocar isso.

Como Greg disse, você quer usar a class Random

 Random rand = new Random(); 

mas a diferença que vou dizer é simples, faça isso:

 Color color = new Color(rand.nextInt(0xFFFFFF)); 

E é tão simples assim! não há necessidade de gerar muitos flutuadores diferentes.

 import android.graphics.Color; import java.util.Random; public class ColorDiagram { // Member variables (properties about the object) public String[] mColors = { "#39add1", // light blue "#3079ab", // dark blue "#c25975", // mauve "#e15258", // red "#f9845b", // orange "#838cc7", // lavender "#7d669e", // purple "#53bbb4", // aqua "#51b46d", // green "#e0ab18", // mustard "#637a91", // dark gray "#f092b0", // pink "#b7c0c7" // light gray }; // Method (abilities: things the object can do) public int getColor() { String color = ""; // Randomly select a fact Random randomGenerator = new Random(); // Construct a new Random number generator int randomNumber = randomGenerator.nextInt(mColors.length); color = mColors[randomNumber]; int colorAsInt = Color.parseColor(color); return colorAsInt; } } 

Eu usei esta maneira simples e inteligente para criar colors aleatórias em Java,

 Random random = new Random(); System.out.println(String.format("#%06x", random.nextInt(256*256*256))); 

Onde #% 06x fornece hexadecimal com zeros (sempre com 6 caracteres).

Você pode instanciar uma cor com três flutuadores (r, g, b), cada um entre 0,0 e 1,0: http://download.oracle.com/javase/6/docs/api/java/awt/Color.html#Color ( float,% 20float,% 20float ).

Usando a class Random do Java, você pode facilmente instanciar uma nova cor aleatória como tal:

 Random r = new Random(); Color randomColor = new Color(r.nextFloat(), r.nextFloat(), r.nextFloat()); 

Eu não posso garantir que todos serão bonitos, mas serão randoms =)

Certo. Apenas gere uma cor usando valores RGB randoms. Gostar:

 public Color randomColor() { Random random=new Random(); // Probably really put this somewhere where it gets executed only once int red=random.nextInt(256); int green=random.nextInt(256); int blue=random.nextInt(256); return new Color(red, green, blue); } 

Você pode querer variar a geração dos números randoms, se você não gosta das colors que ele cria. Eu acho que estas tendem a ser bastante escuras.

Você parece querer colors aleatórias claras. Não tenho certeza do que você quer dizer exatamente com a luz. Mas se você quiser random ‘colors do arco-íris’, tente isso

 Random r = new Random(); Color c = Color.getHSBColor(r.nextFloat(),//random hue, color 1.0,//full saturation, 1.0 for 'colorful' colors, 0.0 for grey 1.0 //1.0 for bright, 0.0 for black ); 

Procure o modelo de colors HSB para obter mais informações.

 package com.adil.util; /** * The Class RandomColor. * * @author Adil OUIDAD * @URL : http://kizana.fr */ public class RandomColor { /** * Gets the random color. * * @return the random color */ public static String getRandomColor() { String[] letters = {"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"}; String color = "#"; for (int i = 0; i < 6; i++ ) { color += letters[(int) Math.round(Math.random() * 15)]; } return color; } } 

Aqui está um método para obter uma cor aleatória:

 private static Random sRandom; public static synchronized int randomColor() { if (sRandom == null) { sRandom = new Random(); } return 0xff000000 + 256 * 256 * sRandom.nextInt(256) + 256 * sRandom.nextInt(256) + sRandom.nextInt(256); } 

Benefícios:

  • Obtenha a representação de número inteiro que pode ser usada com java.awt.Color ou android.graphics.Color
  • Mantenha uma referência estática ao Random .

Isso ajudaria.

 Random randomGenerator = new Random(); int red = randomGenerator.nextInt(255); int green = randomGenerator.nextInt(255); int blue = randomGenerator.nextInt(255); Color randomColour = new Color(red,green,blue); 
Intereting Posts