Android:クリックでランダムな色を生成しますか?


95

私はを持っImageViewています。そこでは、プログラムでドローアブルを作成し、それらをユーザーに提示しています。私の目標は、クリックしImageViewてドローアブルの色を変更することです。

ランダムな色変更ビットについてはどうすればよいですか?現在Random()Color.argb()やその他いくつかをいじっていますが、うまく機能しないようです。

回答:


329
Random rnd = new Random();
paint.setARGB(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256));

または

Random rnd = new Random(); 
int color = Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256));   
view.setBackgroundColor(color);

あなたの場合では、新しいドローアブルを作成してビューに割り当てたいようです。あなたの場合、実際にはドローアブルは何ですか?画像、形、塗りつぶしですか?


15
どこでも255ではなく256にすべきではないでしょうか。nextInt()のAPIは、「半分開いた範囲[0、n)に均一に分散された疑似乱数を返す」と述べています
カタリンモロサン

1
Kaciulaは、あなたは右、nが除外されている。docs.oracle.com/javase/1.4.2/docs/api/java/util/Random.html
Lumis

int color = 0xFF000000 | rnd.nextInt(0xFFFFFF); 「3つではなく1つのランダムのみを使用する」
Umesh Chhabra

Color.argb関数が機能するには、少なくとも26のAPIが必要です。
それはエナムです

@ That'sEnamいや、2つのColor.argb機能があり、1はint型の引数を取り、APIレベル1から存在している、あなたが話している1を約フロートの引数を取り、はい、API 26以降のみです
シェーン僧侶O'Byrne

16

ランダムなカラー値を取得するには、このメソッドを使用できます。

public int getRandomColor(){
   Random rnd = new Random();
   return Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256));
}

次に、ビューに適用します。

myView.setBackgroundColor(getRandomColor());

ここに画像の説明を入力してください


13

したがって、美しいカラーパレットを探している場合は、完全にランダムな値を使用するのはそれほど素晴らしいアイデアではないかもしれません。このアプローチでは、最良の結果が得られない可能性があります。暗すぎる、または明るすぎる、類似した色が常に選択されることになります。

セミランダムアプローチ:

新鮮で光沢のある色が必要な場合は、同じ問題が発生したときに以前に記述した次の単純なクラスを使用します。それだsemi-randomと、事前に定義されたカラーパレットを使用しています。

class RandomColors {
    private Stack<Integer> recycle, colors;

    public RandomColors() {
        colors = new Stack<>();
        recycle =new Stack<>();
        recycle.addAll(Arrays.asList(
                0xfff44336,0xffe91e63,0xff9c27b0,0xff673ab7,
                0xff3f51b5,0xff2196f3,0xff03a9f4,0xff00bcd4,
                0xff009688,0xff4caf50,0xff8bc34a,0xffcddc39,
                0xffffeb3b,0xffffc107,0xffff9800,0xffff5722,
                0xff795548,0xff9e9e9e,0xff607d8b,0xff333333
                )
        );
    }

    public int getColor() {
        if (colors.size()==0) {
            while(!recycle.isEmpty())
                colors.push(recycle.pop());
            Collections.shuffle(colors);
        }
        Integer c= colors.pop();
        recycle.push(c);
        return c;
    }
}

Android用ランダムカラージェネレータークラス


ランダムなアプローチ:

ただし、まだ使用random approachを検討している場合は、複数行のコードではなく、この1行を使用することをお勧めします。

int color= ((int)(Math.random()*16777215)) | (0xFF << 24);

ランダムカラージェネレーターandroid

これを使用する目的は(0xFF << 24)、アルファ値を最大に設定することです。つまり、透明度をゼロにします。


1
あなたのものは、制御された設計ケースに最適です;-)
nemesisfixx

5

私はこれに会いました、そしてこれは私のコードです、助けてください

 /**
 * view-source:http://www.kareno.org/js/colors/ 参考
 *Get Random background color and the text color for the background
 * @return 0--》background
 *          1--》text color
 */
public static  int[] getRandomColor() {
    Random random = new Random();
    int RGB = 0xff + 1;
    int[] colors = new int[2];
    int a = 256;
    int r1 = (int) Math.floor(Math.random() * RGB);
    int r2 = (int) Math.floor(Math.random() * RGB);
    int r3 = (int) Math.floor(Math.random() * RGB);
    colors[0] = Color.rgb(r1, r2, r3);
    if((r1 + r2 + r3) > 450) {
        colors[1] = Color.parseColor("#222222");
    }else{
        colors[1] = Color.parseColor("#ffffff");
    }
    return colors;
}

そしてrgbメソッドはどこにありますか?
Rachit Mishra 2014

@twntee rgbは静的メソッドです:[ developer.android.com/reference/android/graphics/…、int、int)]
acntwww

うん!実際、保存名の付いたファイルに複数のインポートがありましたか?
Rachit Mishra 2014


1

これは私がアプリケーションで使用した私のコードです。

タッチするとランダムな色が生成されます

 public boolean onTouch(View v, MotionEvent event) {
            int x = (int)event.getX();
            int y = (int) event.getY();
            float w = v.getWidth();

            if(x < (w * (1.0/3) )){
                layout.setBackgroundColor(Color.rgb(255,x,y));
            }else if(x < (w * (2.0 / 3))){
                layout.setBackgroundColor(Color.rgb(x,255,y));
            }else{
                layout.setBackgroundColor(Color.rgb(x,y,255));
            }
            return true;
   }

これは正確に何をしますか?タッチの位置を考慮に入れることを意図しているようです
Kartik Chugh

タッチするとビューの背景が変化し、タッチして移動すると、xy位置に応じてランダムな色が生成され、ビューに適用されます
Sumit

1
 public static int randomColor(){
    float[] TEMP_HSL = new float[]{0, 0, 0};
    float[] hsl = TEMP_HSL;
    hsl[0] = (float) (Math.random() * 360);
    hsl[1] = (float) (40 + (Math.random() * 60));
    hsl[2] = (float) (40 + (Math.random() * 60));
    return ColorUtils.HSLToColor(hsl);
}

このコードは、Blueを複数回生成します。ランダムではありません
Hitesh Sahu

1

ColorGeneratorを使用してランダムな色を選択できます

ColorGenerator generator = ColorGenerator.MATERIAL; // or use DEFAULT

int color1 = generator.getRandomColor();      // generate random color

同じユーザー名の繰り返しに対して同じ特定のカラーコードを使用する場合。以下のように使用できます

public int getColorCode(String userName)
    {
        ColorGenerator generator = ColorGenerator.MATERIAL; // or use DEFAULT
        // generate color based on a key (same key returns the same color), useful for list/grid views
        int colorCode = generator.getColor(userName);

        return colorCode;
    }


0

この問題の最も正確な解決策:

-まず、これをgradle(アプリ)に追加し、

compile 'com.github.lzyzsd.randomcolor:library:1.0.0'

次に、アプリをコンパイルして再構築します。

-次のステップは、この方法で使用するだけです。

RandomColor randomColor = new RandomColor();

Button l = findviewbyid(R.id.B1);
l.setBackgroundColor(randomColor.randomColor());

参照リンク:

https://github.com/lzyzsd/AndroidRandomColor


0

あなたの場合、あなたはここのようにすべきです、それは私にとって仕事です

@Override
public void onBindViewHolder(@NonNull WeatherMainAdapter.ViewHolder holder, int position) {
    Random rnd = new Random();
    int color = Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256));
    holder.date.setText(items.get(position).getDt_txt());
    holder.temp.setText(items.get(position).main.getTemp());
    holder.press.setText(items.get(position).main.getPressure());
    holder.cardView.setBackgroundColor(color);
}

0
public static String rndColor()
    {
        Random random = new Random();
        int num = random.nextInt(16777215);
        String hex = "";
        while (num != 0)
        {
            if (num % 16 < 10)
                hex = Integer.toString(num % 16) + hex;
            else
                hex = (char)((num % 16)+55) + hex;
            num = num / 16;
        }

        return "#"+((hex.length()<6)?String.format("%0"+(6-hex.length())+"d", 0):"") + hex;
    }

0

コトリンでは:

val rnd = Random()
val color = Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256))
myView.setBackgroundColor(color)

0

次の2つの解決策がお役に立てば幸いです。

プログラムでランダムな色を取得するには、2つの方法があります。 view

1.最初の解決策

public int randomColor()
       {
         Random random= new Random();
         return Color.argb(255, random.nextInt(256), random.nextInt(256), 
         random.nextInt(256));
       }

adapterスクロールで使用している場合、ランダムな色が表示されるview可能性がありますが、見栄えがよくない場合があります。これを回避するには、2番目のソリューションを使用できます。

2.2番目の解決策

ColorGenerator.DEFAULT代わりにColorGenerator.MATERIALあなたの選択に従って使用できます。number代わりにany を使用することもできますposition

 ColorGenerator generator = ColorGenerator.MATERIAL; 
    int color = generator.getColor(position);
    holder.mEvent_color_strip.setBackgroundColor(color);

そのColorGeneratorは何ですか?どこから入手しますか?
orelzion
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.