it-swarm.com.de

Android: Zufällige Farbe beim Klicken erzeugen?

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

Wie gehe ich mit dem zufälligen Farbwechsel vor? Ich bastele gerade an Random(), Color.argb() und ein paar anderen Dingen, aber ich scheine es nicht zu schaffen!

74
Jared
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 scheint es jedoch so, als wollten Sie ein neues Zeichen erstellen und es Ihrer Ansicht zuordnen. Was ist in Ihrem Fall eigentlich das Drawable? Ist es ein Bild, eine Form, eine Füllung ...

276
Lumis

um zufällige Farbwerte zu erhalten, können Sie diese 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());

 enter image description here

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

Ich habe das getroffen und das ist mein Code, kann 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;
}
2
acntwww

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

Bei Berührung entsteht eine zufällige Farbe

 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

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

Semi-Random-Ansatz:

Wenn Sie frische und glänzende Farben benötigen, verwenden Sie die folgende einfache Klasse, die ich zuvor geschrieben habe, als ich die gleichen Probleme hatte. Es istsemi-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;
    }
}

 Random Color Generator class for Android  


Zufälliger Ansatz:

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

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

 Random Color Generator Android  

Mit diesem (0xFF << 24) können Sie den Alpha-Wert auf das Maximum setzen, das für eine Transparenz von Null steht.

1
ucMedia

Hoffen Sie, dass die folgenden zwei Lösungen Ihnen helfen können.

Es gibt zwei Wege, um willkürliche Farben programmgesteuert auf view zu setzen.

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 adapter beim Scrollen verwenden, erhalten Sie möglicherweise zufällige Farben für dieselbe view. Dies 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.DEFAULT anstelle von ColorGenerator.MATERIAL nach Ihrer Wahl verwenden. Sie können auch beliebige number anstelle von position verwenden.

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

Genaueste Lösung für dieses Problem:

- Füge dies zuerst in der Gradle (App) hinzu,

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

dann kompilieren und erstellen Sie die App neu.

-Der zweite Schritt benutzt 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
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

Zufällige Materialfarbe erzeugen

 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

In deinem Fall solltest du es hier gerne machen, es ist mir Arbeit

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