web-dev-qa-db-fra.com

Android: Générer des couleurs aléatoires sur un clic?

J'ai une ImageView, dans laquelle je crée par programme des tirables et les présente à l'utilisateur. Mon but est de cliquer sur ImageView et de changer la couleur du dessinable.

Comment pourrais-je m'occuper du bit de changement de couleur aléatoire? Je bricole actuellement avec Random(), Color.argb() et quelques autres choses, mais je n'arrive pas à le faire fonctionner!

74
Jared
Random rnd = new Random();
Paint.setARGB(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256));

ou 

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

Bien que dans votre cas, il semble que vous souhaitiez créer un nouveau dessin et l'assigner à votre vue. Quel est le dessin dans votre cas? Est-ce une image, forme, remplissage ...

276
Lumis

pour obtenir des valeurs de couleur aléatoires, vous pouvez utiliser cette méthode:

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

puis appliquez à vos points de vue:

myView.setBackgroundColor(getRandomColor());

 enter image description here

13
Elenasys
thing.setBackgroundColor(new Random().nextInt());
5
Gary Davies

J'ai rencontré ceci et ceci est mon code, un peu d'aide

 /**
 * 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;
}
2
acntwww

Ceci est mon code que j'ai utilisé dans une application, il peut vous aider.

Il génère une couleur aléatoire au toucher

 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;
   }
2
Sumit

Donc, si vous recherchez une belle palette de couleurs, c’est peut-être pas une bonne idée d’utiliser des valeurs totalement aléatoires. Cette approche risque de ne pas donner les meilleurs résultats. Elle se termine toujours par une sélection de couleurs similaires trop sombres ou trop claires.

Approche semi-aléatoire:

Si vous avez besoin de couleurs fraîches et brillantes, utilisez la classe simple suivante, que j’avais écrite précédemment lorsque j’avais les mêmes problèmes. C'estsemi-randomet utilise une palette de couleurs prédéfinie:

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

 Random Color Generator class for Android  


Approche aléatoire:

Mais si vous envisagez toujours d'utiliserrandom approach, vous pouvez utiliser cette ligne unique au lieu de plusieurs lignes de code:

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

 Random Color Generator Android  

L’utilisation de ce (0xFF << 24) permet de définir la valeur alpha au maximum, ce qui signifie une transparence nulle.

1
ucMedia

J'espère que les deux solutions suivantes pourront vous aider.

Il existe deux méthodes pour obtenir des couleurs aléatoires par programmation à définir sur view

1.Première solution  

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

Si vous utilisez dans adapter sur scroll, vous pouvez obtenir des couleurs aléatoires pour la même view. Cela peut ne pas sembler intéressant. Pour éviter cela, vous pouvez utiliser la deuxième solution.

Deuxième solution

Vous pouvez utiliser ColorGenerator.DEFAULT au lieu de ColorGenerator.MATERIAL selon votre choix. Vous pouvez également utiliser une variable number au lieu de position

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

Solution la plus précise de ce problème:

-Tout d'abord, ajoutez ceci dans le dégradé (app),

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

puis compiler et reconstruire l'application.

-La deuxième étape suffit de l'utiliser de cette façon,

RandomColor randomColor = new RandomColor();

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

Lien de référence:

https://github.com/lzyzsd/AndroidRandomColor

0
Sohaib Aslam
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
Kamran
bb.setBackgroundColor(Color.rgb(
    getRandomInteger(0,255),
    getRandomInteger(0, 255),
    getRandomInteger(0, 255)
));
0
Mukesh Patil
 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);
}
0
Raghav Thakkar

Générer une couleur de matériau aléatoire

 view.setBackgroundColor(getRandomMaterialColor("400"));

 private int getRandomMaterialColor(String typeColor) {   
            int returnColor = Color.GRAY;
            int arrayId = context.getResources().getIdentifier("mdcolor_" + typeColor, "array", context.getPackageName());

            if (arrayId != 0) {
                TypedArray colors = context.getResources().obtainTypedArray(arrayId);
                int index = (int) (Math.random() * colors.length());
                returnColor = colors.getColor(index, Color.GRAY);
                colors.recycle();
            }
            return returnColor;
        }
0
xlu

Dans ton cas tu devrais faire comme ici, ça marche pour moi

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