2010-11-22 50 views

Trả lời

94

sử dụng thư viện ngẫu nhiên:

import java.util.Random; 

Sau đó tạo một máy phát ngẫu nhiên:

Random rand = new Random(); 

Như màu sắc được tách ra thành màu đỏ màu xanh lá cây và màu xanh, bạn có thể tạo ra một màu sắc ngẫu nhiên mới bằng cách tạo màu cơ bản ngẫu nhiên:

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

Sau đó, để cuối cùng tạo ra các màu sắc, vượt qua các màu cơ bản vào constructor:

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

Bạn cũng có thể tạo các hiệu ứng ngẫu nhiên khác nhau sử dụng phương pháp này, chẳng hạn như tạo màu sắc ngẫu nhiên với sự nhấn mạnh thêm về màu sắc nhất định ... vượt qua trong ít màu xanh lá cây và xanh da trời để tạo ra một "Pinker" ra màu ndom.

// 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; 

Hoặc để đảm bảo rằng chỉ màu "ánh sáng" được tạo ra, bạn có thể tạo ra màu sắc mà luôn> 0,5 của mỗi yếu tố màu sắc:

// 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; 

Có nhiều chức năng màu khác có thể được sử dụng với lớp Color, chẳng hạn như làm cho sáng hơn màu:

randomColor.brighter(); 

Tổng quan về các lớp Color có thể được đọc ở đây: http://download.oracle.com/javase/6/docs/api/java/awt/Color.html

+2

mã của bạn cho sẽ chỉ tạo ra màu sáng/ánh sáng sẽ không hoạt động. float tiếp theo không chấp nhận float hoặc double như một đối số và thêm .5 làm cho màu sắc biến mất khỏi phạm vi. – Xitcod13

+0

Những màu này có đẹp không? Bạn có một bức tranh? –

+0

@ThomasAhle Nó sẽ tạo ra mọi màu sắc có thể. Tôi không thể vẽ nó trong một bức tranh. :) – Greg

9

Nếu bạn không muốn nó trông khủng khiếp, tôi khuyên bạn nên xác định danh sách các màu trong một mảng và sau đó sử dụng trình tạo số ngẫu nhiên để chọn một.

Nếu bạn muốn có màu ngẫu nhiên, bạn có thể tạo 3 số ngẫu nhiên từ 0 đến 255 và sau đó sử dụng hàm tạo Màu (int, int, int) để tạo một thể hiện Màu mới.

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); 
+1

Và bằng cách này bạn có thể dễ dàng tránh các điểm có cùng màu với nền. – sje397

1

Bạn có thể tạo một màu sắc với ba nổi (r, g, b), mỗi giữa 0.0 và 1.0: http://download.oracle.com/javase/6/docs/api/java/awt/Color.html#Color(float,%20float,%20float).

Sử dụng lớp Random Java của bạn có thể dễ dàng tạo một màu sắc ngẫu nhiên mới như vậy:

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

tôi không thể đảm bảo tất cả họ sẽ được khá, nhưng họ sẽ có ngẫu nhiên =)

1

Chắc chắn. Chỉ cần tạo màu bằng các giá trị RGB ngẫu nhiên. Giống như:

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); 
} 

Bạn có thể muốn thay đổi số thế hệ ngẫu nhiên nếu bạn không thích màu sắc của nó. Tôi đoán những điều này sẽ có xu hướng khá tối.

+1

Thật tuyệt vời. nhưng, tôi có thể làm gì để tạo màu sáng hơn? –

+0

bạn có thể sử dụng Màu.sáng hơn() phương pháp để làm cho bất kỳ màu sắc tạo ra như thế nào. – Andrew

+1

Sandra, để ảnh hưởng đến độ sáng, đảm bảo các giá trị ngẫu nhiên không bao giờ rất tối. 0 là tối nhất và 255 là sáng nhất, vì vậy chỉ cần làm một random.nextInt (128) + 128 ví dụ để không bao giờ nhận được bất kỳ colers tối hơn một nửa độ sáng. –

1

Bạn dường như muốn có màu ngẫu nhiên nhẹ. Không chắc chắn về ý nghĩa của bạn với ánh sáng.Nhưng nếu bạn muốn ngẫu nhiên 'màu sắc cầu vồng', hãy thử điều này

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 
       ); 

Tìm kiếm mô hình màu HSB để biết thêm thông tin.

26

Nếu bạn muốn tô màu phấn, tốt nhất là sử dụng hệ thống 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); 
+1

Bạn có một mẫu với một số màu sắc này tạo ra không? –

17

Sao chép dán này cho pastel tươi sáng cầu vồng màu sắc

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); 
+0

Hoạt động tốt, cảm ơn Komplot! –

+0

@Komplot: Rất đẹp ... – Mani

+0

Tôi thích cách này (HSB) chọn màu ngẫu nhiên. Sử dụng hệ thống RGB có thể tạo ra các kết hợp rất kỳ lạ. Một lưu ý phụ, giá trị màu được nhân lên 360 để tạo ra góc màu trong mô hình màu HSB (Javadoc). – patrickGranite

0
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; 
    } 
} 
29

Một one-liner cho các giá trị RGB ngẫu nhiên:

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

Tôi biết đó là một hơi muộn cho câu trả lời này , nhưng tôi đã không thấy ai khác đặt cái này.

Giống như Greg nói, bạn muốn sử dụng lớp Random

Random rand = new Random(); 

nhưng sự khác biệt Tôi sẽ nói là đơn giản làm điều này:

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

Và nó đơn giản như vậy! không cần phải tạo ra nhiều phao khác nhau.

+0

Ahh. Đó là lý do tại sao tôi phải bỏ qua nó. Tuy nhiên, màu bổ sung sẽ không tạo ra sự khác biệt: P –

-1

Sẽ rất hữu ích.

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); 
+0

Tất cả những gì bạn đã làm là sao chép-dán [câu trả lời khác] (https://stackoverflow.com/a/4246400). – Boann

+0

Tôi đã thử điều này..Đó là công việc ..đó là whay Tôi thích điều này .. –

+0

Ồ tôi hiểu rồi. Đó không phải là những gì chúng tôi làm trên Stack Overflow. Điều cần làm là kiếm 15 đại diện trên trang web (bằng cách đăng câu hỏi và câu trả lời hữu ích mới), vì vậy bạn có thể [bỏ phiếu] (https://stackoverflow.com/help/privileges/vote-up) câu trả lời bạn thấy hữu ích . – Boann

0

Dưới đây là một phương pháp để có được một màu ngẫu nhiên:

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); 
} 

Lợi ích:

  • Lấy đại diện số nguyên mà có thể được sử dụng với java.awt.Color hoặc android.graphics.Color
  • Giữ một tĩnh tham chiếu đến Random.
3
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; 
    } 
} 
2

Tôi đã sử dụng cách này đơn giản và thông minh để tạo màu sắc ngẫu nhiên trong Java,

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

đâu #% 06x mang đến cho bạn hex zero-đệm (dài luôn 6 ký tự).