簡體   English   中英

如何為canvas.drawColor生成隨機數的隨機顏色

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM