2015-05-05 3 views
6

Требование моего приложения - это легкий, но не прозрачный цвет для элементов списка. Я получаю случайные цвета, но он очень темный. И я не знаю, в каком диапазоне я могу получить только светлые цвета. Диапазон дается случайно, как это:Получение случайного цвета с использованием случайного класса?

Random rndm = new Random(); 
int color = Color.argb(255, rndm.nextInt(256), rndm.nextInt(256), rndm.nextInt(256)); 
RelativeLayout rl=(RelativeLayout)rowView.findViewById(R.id.front); 
rl.setBackgroundColor(color); 
+0

Если вы сгенерировали Картинку, палитра должна быть решение: https://developer.android.com/reference/android/support/v7/graphics/Palette.html – shkschneider

+0

Я не генерировал Bitmap, поскольку вы можете видеть, что я просто устанавливаю backgroudnColor в относительный макет. –

+0

Вы могли бы ... это просто идея. Посмотрите мой ответ и попробуйте. – shkschneider

ответ

5

Вам нужны более светлые цвета. Это означает, что значения RGB компоненты должны быть между 128 и 255.

С Random.nextInt(int max) возвращает INT between 0 inclusive and max exclusive, вы можете попробовать что-то вроде этого:

Random rnd = new Random(); 
int r = rnd.nextInt(128) + 128; // 128 ... 255 
int g = rnd.nextInt(128) + 128; // 128 ... 255 
int b = rnd.nextInt(128) + 128; // 128 ... 255 

Color clr = Color.rgb(r, g, b); 
+1

Действительно, более светлые цвета будут включены между 128 и 255 (просто для объяснения). – shkschneider

+0

Забыл отметить это, спасибо. Отредактировал мой ответ. –

+1

ваш подход возвращает то, что я хотел, возвращая мне 2296164,5335561 и 8141674, а возвращение Bowsska 12958379,10361308,11232046. эти результаты по трем пунктам. Большое спасибо. –

4

я указывал на мысль вам, что я буду объяснять здесь:

Random random = new Random(); 
int color = Color.argb(255, random.nextInt(256), random.nextInt(256), random.nextInt(256)); 

Bitmap bitmap = new Bitmap(context); 
bitmap.eraseColor(color); 

Palette.from(bitmap).getLightVibrantColor(); 

См? Я создаю манекен Bitmap, залейте его произвольно сгенерированным цветом, а затем используйте API Palette, чтобы получить «светлый яркий» цвет.

+0

Спасибо @shkschneider. я понял. –

+0

http://stackoverflow.com/questions/30132225/sending-multiple-data-to-server-in-predefined-format? @shkschneider –

4

Как правило, для получения яркого цвета требуется одно из значений RGB, превышающее 128 для того, чтобы получить достаточно 3 случайных значения, и проверки на то, что он может быть больше 128, может быть достаточно. Чем больше значение, тем ярче оно будет.

Вы можете проверить, чтобы среднее значение было больше 128, оно может принести хороший результат.

public int getRandomColor() { 

Random rndm = new Random(); 

int r = rndm.nextInt(256); 
int g = rndm.nextInt(256); 
int b = rndm.nextInt(256); 
int adjust = 0; 

if((r + g + b)/3 < 128) 
    int adjust = (128 - (r + g + b)/3)/3; 

r += adjust; 
g += adjust; 
b += adjust; 

return Color.argb(255, r, g, b); 
} 
+1

Подход Der golem, возвращающий мне 2296164,5335561 и 8141674 во время вашего возвращения 12958379,10361308,11232046. эти результаты по трем пунктам. @Bowsska. Большое спасибо. –

2

Вам необходимо ограничить выбранное вами цветовое пространство. Прямо сейчас вы используете весь спектр RGB, и, конечно, половина темных цветов. Поэтому я предлагаю вам установить базовый цветовой диапазон для всех каналов (путем экспериментирования или поиска в выборе цвета вашей любимой графической программы) и просто рандомизировать диапазон выше этой базовой линии.

final int basec = 128; //baseline would be 50% gray 

Random rndm = new Random(); 
int color = Color.argb(255, basec + rndm.nextInt(256-basec), basec + rndm.nextInt(256-basec), basec + rndm.nextInt(256-basec)); 

RelativeLayout rl=(RelativeLayout)rowView.findViewById(R.id.front); 
rl.setBackgroundColor(color); 
3

Чтобы получить случайный цвет, который является ярким, вы хотите, чтобы каждый канал имел минимальное значение.

Вот код:

// minimumBrightnessRatio between 0 and 1. 1 = all white, 0 = any possible color. Best results would be 0.5. 
public int getRandomColor(float minimumBrightnessRatio) 
{ 
    Random rndm = new Random(); 

    final int minimumColorValue = (int)(255f * minimumBrightnessRatio); 
    final int variableColorValue = 255 - minimumColorValue; 

    final int r = minimumColorValue + rndm.nextInt(variableColorValue); 
    final int g = minimumColorValue + rndm.nextInt(variableColorValue); 
    final int b = minimumColorValue + rndm.nextInt(variableColorValue); 

    return Color.argb(255, r, g, b); 
} 
+0

Сэр, я хочу сделать UI следующим образом [HOMEPAGE] APP (https://play.google.com/store/apps/details?id=com.whaleshark.retailmenot&hl=ru) Я не могу опубликовать ответ, и он не соответствует стандартам, которые я думаю. Я просто хотел создать домашнюю страницу этого приложения. эффект прокрутки. пожалуйста, направляйте меня. это действительно чрезвычайная ситуация. –

2

При работе с интенсивностью света (в вашем случае, вы должны светлые тона), HSI model пригождается. Вы можете произвольно генерировать интенсивность между 0,8 и 1 и рандомизировать оттенок и насыщенность. Затем преобразуйте его в RGB.

Смежные вопросы