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


96

나는이 ImageView있는 내가 programmaticly 드로어 블을 생성하고 사용자에게 제시. 내 목표는 said를 클릭 ImageView하고 드로어 블의 색상을 변경하는 것입니다.

임의의 색상 변경 비트는 어떻게해야합니까? 현재 Random(), Color.argb()및 기타 몇 가지 사항을 수정하고 있지만 작동하지 않는 것 같습니다.

답변:


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

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


15
모든 곳에서 255 대신 256이어야하지 않습니까? nextInt ()에 대한 API ")이 반환 반 개방 범위 [0의 의사 난수 균일하게 분포 INT, n"은 말한다
CATALIN Morosan

1
Kaciula, 맞습니다 n은 제외됩니다 : docs.oracle.com/javase/1.4.2/docs/api/java/util/Random.html
Lumis

int 색상 = 0xFF000000 | rnd.nextInt (0xFFFFFF); "대신에서만 3의 임의의 1을 사용"
Umesh CHHABRA

Color.argb 함수가 작동하려면 API가 26 개 이상 필요합니다.
That 's Enam입니다.

@ That'sEnam nope, 두 개의 Color.argb 함수가 있습니다. 하나는 int 인수를 취하고 API 레벨 1 이후로 존재하고 있습니다. 당신이 말하는 것은 float 인수를 취하고 예, API 26 이후입니다
Shane Monks O'Byrne

16

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

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

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

myView.setBackgroundColor(getRandomColor());

여기에 이미지 설명 입력


13

따라서 아름다운 색상 팔레트를 찾고 있다면 완전히 임의의 값을 사용하는 것은 좋은 생각이 아닐 수도 있습니다. 이 방법은 최상의 결과를 얻지 못할 수 있습니다. 항상 너무 어둡거나 너무 밝은 유사한 색상을 선택하는 것으로 끝납니다.

반 랜덤 접근 :

신선하고 반짝이는 색상이 필요하면 이전에 동일한 문제가있을 때 작성한 다음 간단한 클래스를 사용하십시오. 그것은의 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을 의미하는 최대 값으로 설정하는 것입니다.


1
당신은 제어 설계의 경우 ;-)에 가장 적합
nemesisfixx

5

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

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

그리고 rgb 방법은 어디에 있습니까?
Rachit Mishra 2014 년

@twntee rgb는 정적 메서드입니다. [ developer.android.com/reference/android/graphics/… , int, int)]
acntwww

응 알았어! 실제로 저장 이름으로 내 파일에 여러 가져 오기가 있었습니까?
Rachit Mishra 2014 년


1

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

터치시 임의의 색상을 생성합니다.

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

이것이 정확히 무엇을합니까? 이 터치의 위치에있는 요소를 의미하는 것 같습니다
Kartik Chugh에게

터치시 뷰의 배경을 변경하고, 터치 및 이동시 xy 위치에 따라 임의의 색상을 생성하여 뷰에 적용
Sumit

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

이 코드는 무작위가 아닌 Blue를 여러 번 생성합니다
Hitesh Sahu

1

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

0
bb.setBackgroundColor(Color.rgb(
    getRandomInteger(0,255),
    getRandomInteger(0, 255),
    getRandomInteger(0, 255)
));

0

이 문제의 가장 정확한 해결책 :

-먼저 이것을 gradle (앱)에 추가하고,

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


0

당신의 경우 당신은 여기에서 좋아해야합니다, 그것은 나에게 일합니다

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

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

0

Kotlin에서 :

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

0

다음 두 가지 솔루션이 도움이되기를 바랍니다.

프로그래밍 방식으로 임의의 색상을 가져 오는 두 가지 방법이 있습니다. view

1. 첫 번째 해결책

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

adapter스크롤 에서 in 을 사용 하는 경우 동일한 색상을 무작위로 얻을 view수 있으며 좋지 않을 수 있습니다.이를 피하기 위해 두 번째 솔루션을 사용할 수 있습니다.

2. 두 번째 솔루션

선택 ColorGenerator.DEFAULTColorGenerator.MATERIAL따라 대신 사용할 수 있습니다 . number대신에 사용할 수도 있습니다.position

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

그 ColorGenerator는 무엇입니까? 어디서 얻습니까?
오렐 지온
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.