2011-03-12 20 views
56

Tengo un ImageView, en el cual estoy programando creativamente y presentandolos al usuario. Mi objetivo es hacer clic en dicho ImageView y cambiar el color del dibujo.Android: ¿Genera colores aleatorios al hacer clic?

¿Qué debo hacer con el bit de cambio de color al azar? Actualmente estoy retocando con Random(), Color.argb() y algunas otras cosas, pero parece que no puedo hacerlo funcionar.

+0

Comparte el código que está utilizando, por favor. – Cristian

Respuesta

235
Random rnd = new Random(); 
paint.setARGB(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256)); 

o

Random rnd = new Random(); 
int color = Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256)); 
view.setBackgroundColor(color); 

Aunque en su caso parece que desea crear una nueva estirable y asignarlo a la vista. ¿Qué es realmente el dibujable en tu caso? ¿Es una imagen, forma, llenar ...

+0

Es una forma. Voy a probar tu código aquí en un momento. ¡Gracias! – Jared

+15

¿No debería ser 256 en lugar de 255 en todas partes? La API para nextInt() dice "Devuelve un int. Pseudoaleatorio uniformemente distribuido en el rango medio abierto [0, n)" –

+0

Kaciula, tiene razón, el n está excluido: http://docs.oracle.com/javase /1.4.2/docs/api/java/util/Random.html – Lumis

1

me encontré con esto y esta es mi código, un poco de ayuda de mayo

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

y ¿dónde está el método rgb? –

+0

@twntee rgb es un método estático, vea: [http://developer.android.com/reference/android/graphics/Color.html#rgb(int, int, int)] – acntwww

+0

yup consiguió eso! de hecho hubo múltiples importaciones en mi archivo con guardar nombre? –

1

Este es mi código que he usado en una aplicación, puede ayudarle.

Genera un color aleatorio en contacto

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

¿Qué hace esto exactamente? Parece que tiene que tener en cuenta la posición del toque –

+0

, cambiará el fondo de la vista en el tacto, cuando toque y mueva, generará un color aleatorio de acuerdo con la posición x y y se aplicará para ver – Sumit

0
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); 
} 
-1
bb.setBackgroundColor(Color.rgb(
    getRandomInteger(0,255), 
    getRandomInteger(0, 255), 
    getRandomInteger(0, 255) 
)); 
8

para obtener los valores de color al azar puede utilizar este método:

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

luego se aplican a sus puntos de vista:

myView.setBackgroundColor(getRandomColor()); 

enter image description here

0
thing.setBackgroundColor(new Random().nextInt());