developer tip

Android : 클릭시 임의의 색상 생성?

copycodes 2020. 9. 17. 08:02
반응형

Android : 클릭시 임의의 색상 생성?


나는이 ImageView있는 내가 programmaticly 드로어 블을 생성하고 사용자에게 제시. 내 목표는 said를 클릭 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);

귀하의 경우에는 새 드로어 블을 만들고 뷰에 할당하려는 것 같습니다. 귀하의 경우 실제로 드로어 블은 무엇입니까? 이미지, 모양, 채우기 ...


임의의 색상 값을 얻으려면 다음 방법을 사용할 수 있습니다.

public int getRandomColor(){
   Random rnd = new Random();
   return Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256));
}

그런 다음 뷰에 적용하십시오.

myView.setBackgroundColor(getRandomColor());

여기에 이미지 설명 입력


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

Android 용 Random Color Generator 클래스


무작위 접근 방식 :

그러나 여전히 사용 random approach고려하고 있다면 여러 줄의 코드 대신이 한 줄을 사용할 수 있습니다.

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

랜덤 색상 생성기 android

이것을 사용하는 목적은 (0xFF << 24)알파 값을 투명도 0을 의미하는 최대 값으로 설정하는 것입니다.


나는 이것을 만났고 이것은 내 코드입니다.

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

이것은 내가 응용 프로그램에서 사용한 코드이며 도움이 될 수 있습니다.

It generates a random color on touch

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

Hope the following two solution may help you.

There are two way to get random colors programatically to set to view

1.First solution

public int randomColor()
       {
         Random random= new Random();
         return Color.argb(255, random.nextInt(256), random.nextInt(256), 
         random.nextInt(256));
       }

If you are using in adapter on scroll you may get random colors for same view this may not look good, to avoid this you can use second solution.

2.Second Solution

You can use ColorGenerator.DEFAULT instead of ColorGenerator.MATERIAL as per your choice.You can also use any number instead of position

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

Most Accurate Solution of this problem:

-First, add this in the gradle (app),

compile 'com.github.lzyzsd.randomcolor:library:1.0.0'

then compile and rebuild the app.

-The second step just use it by this way,

RandomColor randomColor = new RandomColor();

Button l = findviewbyid(R.id.B1);
l.setBackgroundColor(randomColor.randomColor());

Reference Link:

https://github.com/lzyzsd/AndroidRandomColor


In your case you should do like here, it's work to me

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

In Kotlin:

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

참고URL : https://stackoverflow.com/questions/5280367/android-generate-random-color-on-click

반응형