Android:点击产生随机颜色吗?


96

我有一个ImageView,其中我以编程方式创建可绘制对象并将其呈现给用户。我的目标是单击“说” ImageView并更改绘图的颜色。

我将如何处理随机变色位?我目前正在修改Random()Color.argb()以及其他一些内容,但似乎无法使它正常工作!

Answers:


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

尽管就您而言,您似乎想创建一个新的drawable并将其分配给视图。您的情况下实际可绘制的是什么?它是图像,形状,填充...


15
难道不是到处都是256而不是255吗?nextInt()的API说:“返回半开范围[0,n)中的伪随机均匀分布的int”
Catalin Morosan 2011年

1
Kaciula,您说得对,n被排除在外:docs.oracle.com/javase/1.4.2/docs/api/java/util/Random.html
Lumis

整数颜色= 0xFF000000 | rnd.nextInt(0xFFFFFF); “仅使用1个随机
变量

Color.argb函数至少需要26个API才能起作用。
那是Enam

@ That'sEnam nope,有两个Color.argb函数,一个带有int参数,自API级别1起就存在,您要谈论的一个带有float参数,是的,仅从API 26开始
Shane Monks O'Byrne

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)功能的目的是将Alpha值设置为最大,这意味着透明度为零。


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方法在哪里?
拉希特·米什拉


是的!其实我的文件中有多个带有保存名称的导入吗?
拉希特·米什拉


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

这到底是做什么的?看起来是要考虑触摸的位置
Kartik Chugh

它将改变触摸时的视图背景,当您触摸和移动时,它将根据xy位置生成随机颜色并应用于视图
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);
}

此代码生成蓝多的时间,它不是随机的
亚太区首席技术官Matt萨胡

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。您也可以使用any number代替position

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

那是什么ColorGenerator?你从哪里得到的?
orelzion
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.