Android: генерировать случайный цвет по щелчку?


у меня есть ImageView, в котором я программно создаю чертежи и представляю их пользователю. Моя цель-нажать на сказал ImageView и изменить цвет drawable.

как бы я пошел о случайном изменении цвета бит? Я в настоящее время возиться с Random(),Color.argb() и еще несколько вещей, но я не могу заставить его работать!

9 65

9 ответов:

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

хотя в вашем случае кажется, что вы хотите создать новый drawable и назначить его вашему представлению. Что на самом деле можно нарисовать в вашем случае? Это изображение, форма, заливка...

чтобы получить случайные значения цвета можно использовать этот метод:

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

затем применить к вашим представлениям:

myView.setBackgroundColor(getRandomColor());

enter image description here

Я встретил это, и это мой код, может помочь

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

Это мой код, который я использовал в приложении, он может помочь вам.

Он генерирует случайный цвет на ощупь

 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;
   }
thing.setBackgroundColor(new Random().nextInt());
 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);
}

наиболее точное решение этой проблемы:

-во-первых, добавьте это в 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

надеюсь, что следующие два решения могут помочь вам.

есть два способа получить случайные цвета программно установить в 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);
bb.setBackgroundColor(Color.rgb(
    getRandomInteger(0,255),
    getRandomInteger(0, 255),
    getRandomInteger(0, 255)
));