Android: Zufällige Farbe beim Klicken erzeugen?

95

Ich habe eine ImageView, in der ich programmgesteuert Drawables erstelle und sie dem Benutzer präsentiere. Mein Ziel ist es, auf das zu klicken ImageViewund die Farbe des Zeichens zu ändern.

Wie würde ich mit dem zufälligen Farbwechsel umgehen? Ich bastle derzeit mit Random(), Color.argb()und ein paar andere Dinge, aber ich kann nicht scheinen , um es an der Arbeit zu bekommen!

Jared
quelle

Antworten:

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

oder

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

In Ihrem Fall möchten Sie jedoch ein neues Zeichen erstellen und es Ihrer Ansicht zuweisen. Was ist eigentlich das Drawable in Ihrem Fall? Ist es ein Bild, eine Form, eine Füllung ...

Lumis
quelle
15
Sollte es nicht überall 256 statt 255 sein? Die API für nextInt () sagt "Gibt ein pseudozufälliges gleichmäßig verteiltes int im halboffenen Bereich zurück [0, n)"
Catalin Morosan
1
Kaciula, Sie haben Recht, das n ist ausgeschlossen: docs.oracle.com/javase/1.4.2/docs/api/java/util/Random.html
Lumis
int color = 0xFF000000 | rnd.nextInt (0xFFFFFF); "Verwenden Sie nur 1 Zufall statt 3"
Umesh Chhabra
Für die Color.argb-Funktion ist eine API von mindestens 26 erforderlich.
Das ist Enam
@ That'sEnam Nein, es gibt zwei Color.argb-Funktionen, eine verwendet int-Argumente und existiert seit API-Ebene 1, die, über die Sie sprechen, nimmt float-Argumente und ja, ist erst seit API 26
Shane Monks O'Byrne
16

Um zufällige Farbwerte zu erhalten, können Sie folgende Methode verwenden:

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

dann bewerben Sie sich auf Ihre Ansichten:

myView.setBackgroundColor(getRandomColor());

Geben Sie hier die Bildbeschreibung ein

Jorgesys
quelle
13

Wenn Sie also nach einer schönen Farbpalette suchen, ist es vielleicht keine so gute Idee, völlig zufällige Werte zu verwenden. Dieser Ansatz liefert möglicherweise nicht die besten Ergebnisse. Er führt immer zu einer Auswahl ähnlicher Farben, die viel zu dunkel oder viel zu hell sind.

Halbzufälliger Ansatz:

Wenn Sie frische und glänzende Farben benötigen, verwenden Sie die folgende einfache Klasse, die ich zuvor geschrieben habe, als ich dieselben Probleme hatte. Es ist semi-randomund verwendet eine vordefinierte Farbpalette:

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

Zufällige Farbgenerator-Klasse für Android


Zufälliger Ansatz:

Wenn Sie jedoch immer noch die Verwendung in Betracht ziehen, können random approachSie diese einzelne Zeile anstelle mehrerer Codezeilen verwenden:

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

Zufälliger Farbgenerator Android

Der Zweck dieser Verwendung (0xFF << 24)besteht darin, den Alpha-Wert auf das Maximum zu setzen, das eine Transparenz von Null bedeutet.

ucMedia
quelle
1
Dein ist das Beste für einen kontrollierten Design-Fall ;-)
nemesisfixx
5

Ich habe dies getroffen und dies ist mein Code. Möge etwas helfen

 /**
 * 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;
}
acntwww
quelle
und wo ist die rgb methode?
Rachit Mishra
@twntee rgb ist eine statische Methode siehe: [ developer.android.com/reference/android/graphics/… , int, int)]
acntwww
yup hab das! gab es tatsächlich mehrere Importe in meiner Datei mit Speichernamen?
Rachit Mishra
5
thing.setBackgroundColor(new Random().nextInt());
Gary Davies
quelle
1

Dies ist mein Code, den ich in einer Anwendung verwendet habe. Er kann Ihnen helfen.

Bei Berührung wird eine zufällige Farbe erzeugt

 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;
   }
Sumit
quelle
Was genau macht das? Es sieht so aus, als ob es die Position der Berührung berücksichtigen soll
Kartik Chugh
es wird den Hintergrund Blick auf Touch ändern, wenn Sie berühren und zu bewegen, wird es gelegentliche Farbe nach xy - Position erzeugen und zu Ansicht anwenden
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);
}
Raghav Thakkar
quelle
Dieser Code generiert Blau
mehrmals
1

Sie können ColorGenerator zum Auswählen der zufälligen Farbe verwenden

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

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

Wenn Sie denselben spezifischen Farbcode für wiederholte gleiche Benutzernamen haben möchten. Sie können wie unten verwenden

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;
    }
König der Massen
quelle
0
bb.setBackgroundColor(Color.rgb(
    getRandomInteger(0,255),
    getRandomInteger(0, 255),
    getRandomInteger(0, 255)
));
Mukesh Patil
quelle
0

Genaueste Lösung dieses Problems:

- Fügen Sie dies zunächst in den Gradle (App) ein.

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

Kompilieren Sie dann die App und erstellen Sie sie neu.

-Der zweite Schritt verwenden Sie es einfach auf diese Weise,

RandomColor randomColor = new RandomColor();

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

Referenzlink:

https://github.com/lzyzsd/AndroidRandomColor

Sohaib Aslam
quelle
0

In deinem Fall solltest du es hier mögen, es ist Arbeit für mich

@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);
}
Максим Сыроватка
quelle
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;
    }
Kamran
quelle
0

In Kotlin:

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

Ich hoffe, die folgenden zwei Lösungen können Ihnen helfen.

Es gibt zwei Möglichkeiten, zufällige Farben programmgesteuert auf einzustellen view

1. Erste Lösung

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

Wenn Sie in adapteron scroll verwenden, erhalten Sie möglicherweise zufällige Farben für dasselbe. viewDies sieht möglicherweise nicht gut aus. Um dies zu vermeiden, können Sie die zweite Lösung verwenden.

2. Zweite Lösung

Sie können ColorGenerator.DEFAULTanstelle von ColorGenerator.MATERIALnach Ihrer Wahl verwenden. Sie können auch any numberanstelle von verwendenposition

 ColorGenerator generator = ColorGenerator.MATERIAL; 
    int color = generator.getColor(position);
    holder.mEvent_color_strip.setBackgroundColor(color);
Sagar
quelle
Was ist das für ein ColorGenerator? Woher bekommen Sie es?
Orelzion