我有一个ImageView
,其中我以编程方式创建可绘制对象并将其呈现给用户。我的目标是单击“说” ImageView
并更改绘图的颜色。
我将如何处理随机变色位?我目前正在修改Random()
,Color.argb()
以及其他一些内容,但似乎无法使它正常工作!
Answers:
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并将其分配给视图。您的情况下实际可绘制的是什么?它是图像,形状,填充...
因此,如果您要寻找漂亮的调色板,使用完全随机的值可能不是一个好主意。这种方法可能不会产生最佳效果。它总是以太深或太亮的相似颜色作为最终选择。
如果您需要一些鲜亮的颜色,请使用下面的简单类,该类是我之前在遇到相同问题时写的。它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;
}
}
但是,如果您仍在考虑使用random approach
,则可能需要使用这一行而不是多行代码:
int color= ((int)(Math.random()*16777215)) | (0xFF << 24);
使用此(0xFF << 24)
功能的目的是将Alpha值设置为最大,这意味着透明度为零。
我遇到了这,这是我的代码,可能会有所帮助
/**
* 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);
}
您可以使用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;
}
bb.setBackgroundColor(Color.rgb(
getRandomInteger(0,255),
getRandomInteger(0, 255),
getRandomInteger(0, 255)
));
此问题的最准确解决方案:
-首先,将其添加到gradle(应用程序)中,
compile 'com.github.lzyzsd.randomcolor:library:1.0.0'
然后编译并重建应用程序。
-第二步就是用这种方式,
RandomColor randomColor = new RandomColor();
Button l = findviewbyid(R.id.B1);
l.setBackgroundColor(randomColor.randomColor());
参考链接:
就您而言,您应该喜欢这里,这对我来说很有效
@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;
}
希望以下两种解决方案对您有所帮助。
有两种方法可以通过编程将随机颜色设置为 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
。您也可以使用anynumber
代替position
ColorGenerator generator = ColorGenerator.MATERIAL;
int color = generator.getColor(position);
holder.mEvent_color_strip.setBackgroundColor(color);