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!

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 ...


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


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.


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

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


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

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

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

0
bb.setBackgroundColor(Color.rgb(
    getRandomInteger(0,255),
    getRandomInteger(0, 255),
    getRandomInteger(0, 255)
));

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


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

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

In Kotlin:

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

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

Was ist das für ein ColorGenerator? Woher bekommen Sie es?
Orelzion
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.