एंड्रॉइड: क्लिक पर यादृच्छिक रंग उत्पन्न करें?


95

मेरे पास एक है ImageView, जिसमें मैं प्रोग्रामेटिक रूप से ड्रॉबल्स बना रहा हूं और उन्हें उपयोगकर्ता को प्रस्तुत कर रहा हूं। मेरा लक्ष्य कहा पर क्लिक करना ImageViewऔर ड्रॉबल का रंग बदलना है।

मैं यादृच्छिक रंग बदलने वाले बिट के बारे में कैसे जाऊंगा? मैं वर्तमान में Random(), Color.argb()और कुछ अन्य चीजों के साथ छेड़छाड़ कर रहा हूं , लेकिन मुझे यह काम करने के लिए नहीं मिल सकता है!

जवाबों:


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

या

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

हालांकि आपके मामले में ऐसा लगता है कि आप एक नया ड्राएबल बनाना चाहते हैं और इसे अपने विचार में निर्दिष्ट करना चाहते हैं। आपके मामले में वास्तव में क्या है? क्या यह एक छवि है, आकार, भरें ...


15
क्या हर जगह 255 की जगह 256 नहीं होना चाहिए? NextInt के लिए एपीआई () कहता है "अर्ध-खुली सीमा में समान रूप से वितरित एक छद्म यादृच्छिक रिटर्न [0, n)"
कैटलिन मोरोसन

1
Kaciula, आप सही हैं n को बाहर रखा गया है: docs.oracle.com/javase/1.4.2/docs/api/java/util/Random.html
लुमिस

int color = 0xFF000000 | rnd.nextInt (0xFFFFFF); "3 के ​​बजाय केवल 1 यादृच्छिक का उपयोग करें"
उमेश छाबड़ा

Color.argb फ़ंक्शन को काम करने के लिए कम से कम 26 एपीआई की आवश्यकता होती है।
यही एनम

@ दैट नॉट नॉट, दो कलर.बर्गर फंक्शंस हैं, एक इंट आर्ग्युमेंट लेता है और एपीआई लेवल 1 के बाद से अस्तित्व में है, आप जिस बारे में बात कर रहे हैं वह फ्लोट दलीलें ले रहा है और हां, केवल 26 एपीआई के बाद से है
शेन मोंक्स ओ'बैन

16

यादृच्छिक रंग मान प्राप्त करने के लिए आप इस विधि का उपयोग कर सकते हैं:

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

फिर अपने विचारों पर लागू करें:

myView.setBackgroundColor(getRandomColor());

यहां छवि विवरण दर्ज करें


13

तो अगर आप एक सुंदर रंग पैलेट की तलाश कर रहे हैं, हो सकता है कि यह पूरी तरह से यादृच्छिक मूल्यों का उपयोग करने के लिए एक महान विचार नहीं है। यह दृष्टिकोण सर्वोत्तम परिणाम नहीं दे सकता है, यह हमेशा इसी तरह के रंगों के चयन के साथ समाप्त होता है जो बहुत गहरा या रास्ता बहुत उज्ज्वल होता है।

अर्ध-यादृच्छिक दृष्टिकोण:

यदि आपको कुछ नए और चमकदार रंगों की आवश्यकता है, तो निम्नलिखित सरल वर्ग का उपयोग करें, जो मैंने पहले लिखा था जब मेरे पास समान मुद्दे थे। यह semi-randomपूर्वनिर्धारित रंग पैलेट का उपयोग करेगा:

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 के लिए यादृच्छिक रंग जनरेटर वर्ग


यादृच्छिक दृष्टिकोण:

लेकिन अगर आप अभी भी उपयोग करने पर विचार कर रहे हैं, तो आप random approachकोड की कई लाइनों के बजाय इस सिंगल लाइन का उपयोग करना चाह सकते हैं:

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

यादृच्छिक रंग जनरेटर Android

इसका उपयोग करने का उद्देश्य (0xFF << 24)अल्फा वैल्यू को अधिकतम यानी शून्य पारदर्शिता निर्धारित करना है।


1
तुम्हारा एक नियंत्रित डिजाइन मामले के लिए सबसे अच्छा है ;-)
nemesisfixx

5

मुझे यह मिला और यह मेरा कोड है, मई कुछ मदद करता है

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

और आरजीबी विधि कहां है?
रचित मिश्रा

@ वॉटनी आरजीबी एक स्थिर विधि है: देखें: [ developer.android.com/reference/android/graphics/… , int, int)]
acntwww

हाँ मिल गया! वास्तव में सेव नाम के साथ मेरी फ़ाइल में कई आयात थे?
रचित मिश्रा


1

यह मेरा कोड है जिसे मैंने एक एप्लिकेशन में उपयोग किया है, यह आपकी मदद कर सकता है।

यह स्पर्श पर एक यादृच्छिक रंग उत्पन्न करता है

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

वास्तव में यह क्या करता है? ऐसा लगता है कि यह स्पर्श की स्थिति में कारक है
कार्तिक चुघ

यह स्पर्श पर दृश्य की पृष्ठभूमि को बदल देगा, जब आप स्पर्श करेंगे और स्थानांतरित करेंगे, तो यह xy स्थिति के अनुसार यादृच्छिक रंग उत्पन्न करेगा और देखने के लिए लागू होगा
सुमित

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

यह कोड ब्लू मल्टीपल टाइम जनरेट करता है, इसका रैंडम नहीं
हितेश साहू

1

आप यादृच्छिक रंग चुनने के लिए ColorGenerator का उपयोग कर सकते हैं

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

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

यदि आप एक ही उपयोगकर्ता नाम के लिए एक ही विशिष्ट रंग कोड चाहते हैं। आप नीचे की तरह उपयोग कर सकते हैं

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

इस समस्या का सबसे सटीक समाधान:

-फर्स्ट, इसे ग्रेड (ऐप) में जोड़ें,

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

फिर एप्लिकेशन को संकलित और पुनर्निर्माण करें।

-दूसरा चरण इस तरह से इसका उपयोग करें,

RandomColor randomColor = new RandomColor();

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

संदर्भ लिंक:

https://github.com/lzyzsd/AndroidRandomColor


0

आपके मामले में आपको यहां जैसा करना चाहिए, यह मेरे लिए काम है

@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

कोटलिन में:

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

0

मुझे उम्मीद है कि निम्नलिखित दो समाधान आपकी मदद कर सकते हैं।

क्रमबद्ध रूप से सेट करने के लिए यादृच्छिक रंग प्राप्त करने के दो तरीके हैं view

1. प्यास समाधान

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

यदि आप adapterस्क्रोल ऑन का उपयोग कर रहे हैं, तो आपको उसी के लिए यादृच्छिक रंग मिल viewसकते हैं यह अच्छा नहीं लग सकता है, इससे बचने के लिए आप दूसरे समाधान का उपयोग कर सकते हैं।

2. सेकेंड सॉल्यूशन

आप उपयोग कर सकते हैं ColorGenerator.DEFAULTके बजाय ColorGenerator.MATERIALअपनी पसंद के अनुसार। आप के numberबजाय किसी भी उपयोग कर सकते हैंposition

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

क्या है कि ColorGenerator? आप इसे कहाँ से प्राप्त करते हैं?
orelzion
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.