나는이 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);
귀하의 경우에는 새 드로어 블을 만들고 뷰에 할당하려는 것 같습니다. 귀하의 경우 실제로 드로어 블은 무엇입니까? 이미지, 모양, 채우기 …
답변
답변
따라서 아름다운 색상 팔레트를 찾고 있다면 완전히 임의의 값을 사용하는 것은 좋은 생각이 아닐 수도 있습니다. 이 방법은 최상의 결과를 얻지 못할 수 있습니다. 항상 너무 어둡거나 너무 밝은 유사한 색상을 선택하는 것으로 끝납니다.
반 랜덤 접근 :
신선하고 반짝이는 색상이 필요하면 이전에 동일한 문제가있을 때 작성한 다음 간단한 클래스를 사용하십시오. 그것은의 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;
}
답변
thing.setBackgroundColor(new Random().nextInt());
답변
이것은 내가 응용 프로그램에서 사용한 코드이며 도움이 될 수 있습니다.
터치시 임의의 색상을 생성합니다.
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);
}