Android: 点击生成随机颜色?

我有一个 ImageView,其中我是程序化创建绘图,并提出他们给用户。我的目标是点击所说的 ImageView和改变绘图的颜色。

我该如何进行随机的颜色变化位?我目前正在修补与 Random()Color.argb()和其他一些东西,但我似乎不能让它工作!

121208 次浏览
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);

尽管在您的情况下,似乎希望创建一个新的绘图工具并将其分配给视图。在你的情况下,实际上什么是可画的?它是一个图像,形状,填充..。

我遇到了这个,这是我的代码,可能有些帮助

 /**
* 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;
}
 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);
}
bb.setBackgroundColor(Color.rgb(
getRandomInteger(0,255),
getRandomInteger(0, 255),
getRandomInteger(0, 255)
));

为了得到随机的颜色值,你可以使用这个方法:

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

thing.setBackgroundColor(new Random().nextInt());

我希望以下两个解决方案能对你有所帮助。

有两种方法可以通过编程将随机颜色设置为 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);

这个问题最精确的解决方案:

- 首先,把这个添加到渐变(应用程序) ,

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

对你来说,你应该像这样,这是我的工作

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

在 Kotlin:

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

所以如果你在寻找一个漂亮的调色板,也许使用完全随机的值并不是一个好主意。 这种方法可能不会产生最好的结果,它总是最终选择类似的颜色,方式太暗或方式太明亮。< br >

半随机方法(Java) :

If you need some fresh and shiny colors then use the following simple class, that I wrote previously when I had the same issues. It's semi-random and uses a predefined color palette:

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

Random Color Generator class for android


随机方法(Java) :

但是,如果你仍然在考虑使用 random approach,你可能想使用这一行代码,而不是多行代码:

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

Random Color Generator android

使用此 (0xFF << 24)的目的是将 alpha 值设置为最大值,这意味着透明度为零。

半随机(科特林)

class RandomColors() {
private val recycle:Stack<Int> = Stack()
private val colors:Stack<Int> = Stack()
init {
recycle.addAll(
Arrays.asList(
// ARGB hex to int >> (0xFFEE5670.toInt(),...)
-0xbbcca, -0x16e19d, -0x63d850, -0x98c549,
-0xc0ae4b, -0xde690d, -0xfc560c, -0xff432c,
-0xff6978, -0xb350b0, -0x743cb6, -0x3223c7,
-0x14c5, -0x3ef9, -0x6800, -0xa8de,
-0x86aab8, -0x616162, -0x9f8275, -0xcccccd
)
)
}


fun getColor(): Int {
if (colors.size == 0)
while (!recycle.isEmpty()) colors.push(recycle.pop())
Collections.shuffle(colors)
val c = colors.pop()
recycle.push(c)
return c
}
}

随机方法(Kotlin) :

val color = (Math.random() * 16777215).toInt() or (0xFF shl 24)

You can use ColorGenerator for picking the random color

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

最简单的溶胶... 改变范围,以避免深色或浅色。.比如30到200人,避开黑人和白人家庭。.

val randomColor: Int
get() {
return Color.rgb((30..200).random(),(30..200).random(),(30..200).random())
}

这里有一个类似的扩展:

fun Int.Companion.randomColor(): Int
{
return Color.argb(255,
Random.nextInt(256),
Random.nextInt(256),
Random.nextInt(256))
}

用法如下:

myTextView.setBackgroundColor(Int.randomColor());

喷气背包构图中的随机颜色

val RandomColor
get() = Color(Random.nextInt(256), Random.nextInt(256), Random.nextInt(256))