[英]how to generate random numbers of random colors for canvas.drawColor
我仍然是android開發的新手,到目前為止,我一直在處理的所有應用程序都與圖形無關。 現在,我正在制作一個顯示圖表,精確的餅圖的應用程序,即時通訊程序無需任何第三方庫。 這是我遵循的教程。
現在的問題是,我將用來構造圖形的數據是動態的,因此為每個項目分配圖形的顏色,我需要為canvas.drawColor生成許多隨機顏色。 顏色的數量當然取決於我在運行時確定的動態數據,並且還需要生成顏色值。 如果生成的顏色是鮮明的色彩也很不錯。
我從來沒有涉及過畫布,知道如何做到嗎? 示例代碼將不勝感激。
謝謝
在運行時很難獲得不同且有用的顏色。 最好不要使用太多的隨機性,而要使20種固定顏色的數組非常不同,並使用X的前一種顏色作為數據。 如果您需要更多,則可以使用具有隨機RGB值的真實隨機顏色:
Random r = new Random();
Color c = new Color( r.nextInt(255), r.nextInt(255), r.nextInt(255) );
我不會只使用完全隨機的顏色。 您將獲得完全不同的飽和度和亮度,看起來很難看。
您可以固定飽和度(為鮮艷的顏色選擇一個較高的值)和亮度,並選擇一個隨機的色相值,但是冒着獲得兩個連續的幾乎相同顏色的餅圖的風險。
我將計算出一組分散的色相值,如該問題的答案所示:
重新發布下面的答案
import java.awt.*;
public class TestComponent extends JPanel {
int numCols = 6;
public void paint(Graphics g) {
float h = 0, dh = (float) getHeight() / numCols;
Color[] cols = getDifferentColors(numCols);
for (int i = 0; i < numCols; i++) {
g.setColor(cols[i]);
g.fillRect(0, (int) h, getWidth(), (int) (h += dh));
}
}
public static Color[] getDifferentColors(int n) {
Color[] cols = new Color[n];
for (int i = 0; i < n; i++)
cols[i] = Color.getHSBColor((float) i / n, 1, 1);
return cols;
}
public static void main(String s[]) {
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.add(new TestComponent());
f.setSize(400, 400);
f.setVisible(true);
}
}
如果您需要超過30種顏色,則當然可以更改亮度和飽和度,例如有10種深色,10種中間色調和10種亮色。
您應該對每個顏色分量進行隨機浮動:
Random rand = new Random();
float r = rand.nextFloat();
float g = rand.nextFloat();
float b = rand.nextFloat();
由於需要鮮艷的色彩,因此可以使用Color.brighter()
方法。
Color c = new Color(r, g, b);
c = c.brighter();
否則,您可以設置一個閾值,以使顏色值具有最小值(越高越亮):
float minimumBrightness = 0.6; //higher is more vibrant
float r = rand.nextFloat(1-minimumBrightness) + minimumBrightness; //for each component
這樣可以確保鮮艷的色彩。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.