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;
}
}
무작위 접근 방식 :
그러나 여전히 사용 random approach
을 고려하고 있다면 여러 줄의 코드 대신이 한 줄을 사용할 수 있습니다.
int color= ((int)(Math.random()*16777215)) | (0xFF << 24);
이것을 사용하는 목적은 (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 sameview
this may not look good, to avoid this you can use second solution.
2.Second Solution
You can use
ColorGenerator.DEFAULT
instead ofColorGenerator.MATERIAL
as per your choice.You can also use anynumber
instead ofposition
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:
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
'developer tip' 카테고리의 다른 글
x + =가 x = x + a보다 빠릅니까? (0) | 2020.09.17 |
---|---|
MVC3 Razor DropDownListFor 열거 형 (0) | 2020.09.17 |
C ++에서 숫자가 2의 거듭 제곱인지 테스트하는 가장 간단한 방법은 무엇입니까? (0) | 2020.09.17 |
루프없이 레코드를 유지하면서 배열에서 빈 문자열을 제거 하시겠습니까? (0) | 2020.09.17 |
디버깅을 시작할 수 없습니다. (0) | 2020.09.17 |