2012-04-20 25 views
0

私はアンドロイド開発でまだ新しいです、そして、これまで扱ってきたすべてのアプリは、グラフィカルに関連していません。今、私はグラフを表示するアプリを作っています。そして、円グラフは正確であり、私はサードパーティのライブラリなしでこれを作っています。 Thisは私が従ったチュートリアルです。canvas.drawColorのランダムな色の乱数を生成する方法

グラフを構成するために使用するデータが動的であるため、グラフの各色を割り当てるためには、canvas.drawColorのランダムな色をいくつか生成する必要があります。カラーの数は、もちろん、実行時に決定される私のダイナミックデータに依存し、カラー値も生成する必要があります。 また、生成される色が目立つような鮮やかな色であればいいでしょう。

私はキャンバスを扱ったことがありません。どのようにこれを行うことができますか?例のコードは非常に高く評価されます。

おかげ

+0

本当に質問はありません。私はあなたが見ることができるアンドロイドキャンバスを使用して、多くのチュートリアルがあり、たくさんのサンプルコードがあると確信しています。 http://mattgemmell.com/2008/12/08/what-have-you-tried/ – aglassman

答えて

1

実行時に異なると便利な色を取得するのは非常に難しいだろう。最高ののは、あまり多くのランダム性を使用するのではなく、20個の固定カラーをかなり区別して、Xの最初のものをデータとして使用するという配列を作ってください。さらに必要な場合は、ランダムなRGB値を使用して実際のランダムな色を使用してください:

Random r = new Random(); 
Color c = new Color(r.nextInt(255), r.nextInt(255), r.nextInt(255)); 
+0

実際には今言われましたが、5色を作成し、自分のデータでそれらをループすることは可能でしょうか?同じ連続した色はありませんか? – ariken929

+1

ランダムな色は簡単に生成できます。見栄えを良くすることは難しいです。私はあなたが素敵な見た目の色の配列を作る方が良いと思うことに同意します。その20〜50点を無作為に選んでください。 – aglassman

+2

r.nextInt(256)を使用すべきではありませんか?それ以来、上限? – user717572

1

私は完全にランダムな色を使用しません。まったく違う彩度と明るさが得られます。

彩度(鮮やかな色の値を高くする)と明るさを固定し、ランダムな色相値を選択できますが、ほぼ同じ色の連続する2つのパイスライスが得られる危険性があります。

この質問への回答で示したように、私が広がっ色相値のセットを計算します


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); 
    } 
} 
以下の答えを再投稿

enter image description here

30色以上の色が必要な場合は、もちろん明るさや彩度も変更できます。例えば、暗い色10色、中間色10色、明るい色10色があります。

1

あなたは、色成分毎にランダムな浮動小数点数を取る必要があります。

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 

を。これは、鮮やかな色を保証します。

+0

を確認していないので、これはrgb値を使用します。次のチュートリアルでは、int colors {] = { - 6777216、-16776961、-16711681、-12303292、-7829368}を使用しています。これがどんな種類の価値なのか教えていただけますか? – ariken929

+0

'http:// www.ceveni.com/2009/08/set-rgb-color-codes-for-android-and-rgb.html'のようなrgbコードのように見えますが、おそらくjavaでそれらを変換することができます。もし私があなただったら、私は別々のコンポーネントを使いにくいでしょう。必要に応じて、0〜255の範囲で色を定義することもできます。 – user717572

関連する問題