Android: Створити випадковий колір за кліком?


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
Чи не скрізь повинно бути 256 замість 255? В API для nextInt () сказано: "Повертає псевдовипадковий рівномірно розподілений int у напіввідкритому діапазоні [0, n)"
Каталін Моросан,

1
Качіула, ти маєш рацію, якщо виключається n: docs.oracle.com/javase/1.4.2/docs/api/java/util/Random.html
Люміс

int колір = 0xFF000000 | rnd.nextInt (0xFFFFFF); "використовувати лише 1 випадковий замість 3"
Умеш Чхабра

Функція Color.argb вимагає від API щонайменше 26 для роботи.
Це Енам,

@ ThatEnam ні, є дві функції Color.argb, одна приймає аргументи int і існує з рівня API 1, та, про яку ви говорите, приймає аргументи з плаваючою позицією, і так, лише з API 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;
}

а де метод rgb?
Рахіт Мішра,

@twntee rgb - це статичний метод, див .: [ 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

Найточніше рішення цієї проблеми:

-Спочатку додайте це в gradle (додаток),

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 та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.