Android: Tıklamada rastgele renk üretilsin mi?


99

Bir var ImageViewki ben programmaticly drawables oluşturma ve kullanıcıya sunmakla. Amacım söylenenlere tıklamak ImageViewve çekilebilir ürünün rengini değiştirmek.

Rastgele renk değiştirme bitine nasıl gidebilirim? Şu anda müdahele ediyorum Random(), Color.argb()ve birkaç başka şeyler, ama işe almak gibi olamaz!

Yanıtlar:


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

veya

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

Yine de sizin durumunuzda, yeni bir çekilebilir dosya oluşturmak ve onu kendi görüşünüze atamak istiyorsunuz gibi görünüyor. Sizin durumunuzdaki aslında çekilebilir olan nedir? Bir görüntü mü, şekil mi, dolgu mu ...


16
Her yerde 255 yerine 256 olması gerekmez mi? NextInt () için API "Yarı açık aralıkta [0, n) sözde rastgele dağıtılmış bir int döndürür" diyor
Catalin Morosan

1
Kaciula, haklısın n hariç tutuluyor
Lumis

int renk = 0xFF000000 | rnd.nextInt (0xFFFFFF); "3 yerine sadece 1 rastgele kullan"
Umesh Chhabra

Color.argb işlevi, çalışması için en az 26 API gerektirir.
Bu Enam

@ BuEnam hayır, iki Color.argb işlevi var, biri int argümanlarını alıyor ve API seviye 1'den beri var, bahsettiğinizde float argümanları alıyor ve evet, yalnızca API 26'dan beri
Shane Monks O'Byrne

16

Öyleyse, güzel bir renk paleti arıyorsanız, Tamamen rastgele değerler kullanmak O Kadar Harika Bir Fikir Değildir. Bu yaklaşım en iyi sonuçları vermeyebilir, her zaman çok koyu veya çok parlak benzer renklerden oluşan bir seçimle sonuçlanır.

Yarı rastgele yaklaşım:

Taze ve parlak renklere ihtiyacınız varsa, daha önce aynı sorunları yaşadığımda yazdığım aşağıdaki basit sınıfı kullanın. Bu var semi-randomve önceden tanımlanmış bir renk paleti kullanır:

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 için Random Color Generator sınıfı


Rastgele yaklaşım:

Ancak yine de kullanmayı random approachdüşünüyorsanız, birden çok kod satırı yerine bu tek satırı kullanmak isteyebilirsiniz:

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

Rastgele Renk Üreticisi android

Bunu kullanmanın amacı (0xFF << 24), alfa değerini maksimuma ayarlamaktır, bu da sıfır şeffaflık anlamına gelir.


1
Kontrollü bir tasarım vakası için
sizinki

15

rastgele renk değerleri elde etmek için bu yöntemi kullanabilirsiniz:

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

ardından görüşlerinize uygulayın:

myView.setBackgroundColor(getRandomColor());

görüntü açıklamasını buraya girin


5

Bununla tanıştım ve bu benim kodum, biraz yardım edebilir

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

ve rgb yöntemi nerede?
Rachit Mishra

@twntee rgb statik bir yöntemdir bkz: [ developer.android.com/reference/android/graphics/… , int, int)]
acntwww

evet anladım! aslında dosyamda kaydetme adıyla birden fazla içe aktarma var?
Rachit Mishra


1

Bu benim bir uygulamada kullandığım kodum, size yardımcı olabilir.

Dokunulduğunda rastgele bir renk oluşturur

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

Bu tam olarak ne yapıyor? Dokunma pozisyonunu
hesaba katması

Dokunulduğunda görünümün arka planını değiştirecek, dokunduğunuzda ve hareket ettiğinizde, xy konumuna göre rastgele renk oluşturacak ve görünüme uygulanacak
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);
}

Bu kod
Mavi'yi

1

Rastgele rengi seçmek için ColorGenerator'ı kullanabilirsiniz.

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

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

Tekrarlanan aynı kullanıcı adları için aynı özel renk koduna sahip olmak istiyorsanız. aşağıdaki gibi kullanabilirsin

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

Bu sorunun En Doğru Çözümü:

-İlk olarak, bunu gradle'a (uygulama) ekleyin,

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

ardından uygulamayı derleyin ve yeniden oluşturun.

-İkinci adımda sadece bu şekilde kullanın,

RandomColor randomColor = new RandomColor();

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

Referans Bağlantısı:

https://github.com/lzyzsd/AndroidRandomColor


0

Senin durumunda burayı sevmelisin, bu benim için iş

@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

Kotlin'de:

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

0

Umarım aşağıdaki iki çözüm size yardımcı olabilir.

Programlı olarak rastgele renkler elde etmenin iki yolu vardır. view

1. İlk çözüm

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

Eğer adapterkaydırmada kullanıyorsanız , aynı renk için rastgele renkler elde edebilirsiniz, viewbu iyi görünmeyebilir, bundan kaçınmak için ikinci çözümü kullanabilirsiniz.

2. İkinci Çözüm

Tercihinize göre ColorGenerator.DEFAULTyerine kullanabilirsiniz ColorGenerator.MATERIAL. Bunun numberyerine herhangi birini de kullanabilirsinizposition

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

1
bu ColorGenerator nedir? Nereden alıyorsun
orelzion
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.