J'ai une ImageView
, dans laquelle je crée par programme des tirables et les présente à l'utilisateur. Mon but est de cliquer sur ImageView
et de changer la couleur du dessinable.
Comment pourrais-je m'occuper du bit de changement de couleur aléatoire? Je bricole actuellement avec Random()
, Color.argb()
et quelques autres choses, mais je n'arrive pas à le faire fonctionner!
Random rnd = new Random();
Paint.setARGB(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256));
ou
Random rnd = new Random();
int color = Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256));
view.setBackgroundColor(color);
Bien que dans votre cas, il semble que vous souhaitiez créer un nouveau dessin et l'assigner à votre vue. Quel est le dessin dans votre cas? Est-ce une image, forme, remplissage ...
thing.setBackgroundColor(new Random().nextInt());
J'ai rencontré ceci et ceci est mon code, un peu d'aide
/**
* 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;
}
Ceci est mon code que j'ai utilisé dans une application, il peut vous aider.
Il génère une couleur aléatoire au toucher
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;
}
Donc, si vous recherchez une belle palette de couleurs, c’est peut-être pas une bonne idée d’utiliser des valeurs totalement aléatoires. Cette approche risque de ne pas donner les meilleurs résultats. Elle se termine toujours par une sélection de couleurs similaires trop sombres ou trop claires.
Si vous avez besoin de couleurs fraîches et brillantes, utilisez la classe simple suivante, que j’avais écrite précédemment lorsque j’avais les mêmes problèmes. C'estsemi-random
et utilise une palette de couleurs prédéfinie:
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;
}
}
Mais si vous envisagez toujours d'utiliserrandom approach
, vous pouvez utiliser cette ligne unique au lieu de plusieurs lignes de code:
int color= ((int)(Math.random()*16777215)) | (0xFF << 24);
L’utilisation de ce (0xFF << 24)
permet de définir la valeur alpha au maximum, ce qui signifie une transparence nulle.
J'espère que les deux solutions suivantes pourront vous aider.
Il existe deux méthodes pour obtenir des couleurs aléatoires par programmation à définir sur view
1.Première solution
public int randomColor()
{
Random random= new Random();
return Color.argb(255, random.nextInt(256), random.nextInt(256),
random.nextInt(256));
}
Si vous utilisez dans
adapter
sur scroll, vous pouvez obtenir des couleurs aléatoires pour la mêmeview
. Cela peut ne pas sembler intéressant. Pour éviter cela, vous pouvez utiliser la deuxième solution.
Deuxième solution
Vous pouvez utiliser
ColorGenerator.DEFAULT
au lieu deColorGenerator.MATERIAL
selon votre choix. Vous pouvez également utiliser une variablenumber
au lieu deposition
ColorGenerator generator = ColorGenerator.MATERIAL;
int color = generator.getColor(position);
holder.mEvent_color_strip.setBackgroundColor(color);
Solution la plus précise de ce problème:
-Tout d'abord, ajoutez ceci dans le dégradé (app),
compile 'com.github.lzyzsd.randomcolor:library:1.0.0'
puis compiler et reconstruire l'application.
-La deuxième étape suffit de l'utiliser de cette façon,
RandomColor randomColor = new RandomColor();
Button l = findviewbyid(R.id.B1);
l.setBackgroundColor(randomColor.randomColor());
Lien de référence:
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;
}
bb.setBackgroundColor(Color.rgb(
getRandomInteger(0,255),
getRandomInteger(0, 255),
getRandomInteger(0, 255)
));
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);
}
Générer une couleur de matériau aléatoire
view.setBackgroundColor(getRandomMaterialColor("400"));
private int getRandomMaterialColor(String typeColor) {
int returnColor = Color.GRAY;
int arrayId = context.getResources().getIdentifier("mdcolor_" + typeColor, "array", context.getPackageName());
if (arrayId != 0) {
TypedArray colors = context.getResources().obtainTypedArray(arrayId);
int index = (int) (Math.random() * colors.length());
returnColor = colors.getColor(index, Color.GRAY);
colors.recycle();
}
return returnColor;
}
Dans ton cas tu devrais faire comme ici, ça marche pour moi
@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);
}