ImageView
があります。この中に、プログラムでドロウアブルを作成し、ユーザーに表示します。私の目標は、上記のImageView
をクリックして、ドロウアブルの色を変更することです。
ランダムな色変更ビットについてはどうすればいいですか?私は現在Random()
、Color.argb()
および他のいくつかのことをいじっていますが、機能させることができないようです!
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);
あなたの場合、新しいドロウアブルを作成し、それをビューに割り当てたいようです。あなたの場合、実際にはドローアブルとは何ですか?画像、形状、塗りつぶし...
thing.setBackgroundColor(new Random().nextInt());
したがって、美しいカラーパレットを探している場合、完全にランダムな値を使用するのはそれほど素晴らしい考えではないかもしれません。このアプローチでは、最良の結果が得られない場合があります。常に同じ色を選択すると、暗すぎたり明るすぎたりします。
新鮮で光沢のある色が必要な場合は、次の簡単なクラスを使用します。これは、以前同じ問題が発生したときに書いたものです。それは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
複数行のコードの代わりに、次の1行を使用できます。
int color= ((int)(Math.random()*16777215)) | (0xFF << 24);
これを使用する目的(0xFF << 24)
は、アルファ値を透明度ゼロを意味する最大値に設定します。
私はこれに会いました、これは私のコードです、助けてください
/**
* 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);
}
この問題の最も正確な解決策:
-まず、これをgradle(アプリ)に追加し、
compile 'com.github.lzyzsd.randomcolor:library:1.0.0'
その後、アプリをコンパイルして再構築します。
-2番目のステップでは、この方法で使用します。
RandomColor randomColor = new RandomColor();
Button l = findviewbyid(R.id.B1);
l.setBackgroundColor(randomColor.randomColor());
参照リンク:
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)
));
次の2つの解決策が役立つことを願っています。
view
に設定するランダムな色をプログラムで取得する方法は2つあります
1。最初の解決策
public int randomColor()
{
Random random= new Random();
return Color.argb(255, random.nextInt(256), random.nextInt(256),
random.nextInt(256));
}
スクロールで
adapter
を使用している場合、同じview
に対してランダムな色が表示される場合がありますが、これを避けるには2番目の解決策を使用できます。
2.Second Solution
選択により、
ColorGenerator.DEFAULT
の代わりにColorGenerator.MATERIAL
を使用できます。number
の代わりにposition
を使用することもできます
ColorGenerator generator = ColorGenerator.MATERIAL;
int color = generator.getColor(position);
holder.mEvent_color_strip.setBackgroundColor(color);
ランダムマテリアルの色を生成
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;
}
あなたの場合、あなたはここのようにするべきです、それは私にとって仕事です
@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);
}