Pregunta

Si fijo mi ImageView a ser a la vez se puede hacer clic y enfocable, funciona, pero no tengo forma de saber qué imagen está enfocada. ¿Cuál es la mejor manera de conseguirlo para dibujar un borde naranja alrededor de la vista para que el usuario sabe que está actualmente en el enfoque?

He intentado dejarlo caer en un LinearLayout y establecer que para ser enfocable y hacer clic en su lugar, pero no tenía ninguna suerte. Incluso cuando pongo un margen en él, no hay nada que indique que fue seleccionado.

¿Fue útil?

Solución

Se puede utilizar un estirable con un selector como el fondo.

Por ejemplo, tengo gallery_image_bg.xml en res / dibujable:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
          android:constantSize="true">
  <item android:state_selected="true">
    <shape android:shape="rectangle">
      <solid android:color="#E6E4E0"/>
      <stroke android:width="3dp" android:color="#F9C11E"/>
      <padding android:left="3dp"
               android:top="3dp"
               android:right="3dp"
               android:bottom="3dp" />
    </shape>
  </item>
  <item android:state_pressed="true">
    <shape android:shape="rectangle">
      <solid android:color="#E6E4E0"/>
      <stroke android:width="3dp" android:color="#F9C11E"/>
      <padding android:left="3dp"
               android:top="3dp"
               android:right="3dp"
               android:bottom="3dp" />
    </shape>
  </item>
  <item>
    <shape android:shape="rectangle">
      <solid android:color="#E6E4E0"/>
      <stroke android:width="3dp" android:color="#FFF"/>
      <padding android:left="3dp"
               android:top="3dp"
               android:right="3dp"
               android:bottom="3dp" />
    </shape>
  </item>
</selector>

Esto crea tres líneas 3DP de color diferentes en torno a la imagen. Son visibles debido a que las fuerzas de relleno de la imagen para la presentación en una zona un poco más pequeño.

Se utiliza en el código de este modo:

image.setBackgroundResource(R.drawable.gallery_image_bg)

Otros consejos

La solución más rápida es utilizar un oyente, que responderá a la pulsación, y establecer un borde naranja en la imageView ...

imageView.setOnClickListener(listener)

Pero hay que hacerlo para todos los elementos ImageView. Al menos pueden compartir la misma escucha.

La solución a largo es implementar su propio punto de vista, que se extiende ImageView, que obtiene su propia borde naranja en respuesta a un clic.

Asumo que quieres que esto funcione como botones de radio, en donde al hacer clic en un ImageView quitar el borde de la ImageView previamente seleccionado? Por lo que tendrá el oyente compartida para mantener una referencia a la ImageView seleccionado en ese momento, que puede ser "de-selecciona" cuando se hace clic en un nuevo ImageView.

respuesta tardía, pero se puede también utilizar un LayerDrawable para el origen de la imagen. Entonces usted no tiene que perder el tiempo con el fondo, relleno, etc.

LayerDrawable d = new LayerDrawable(new Drawable[]{new BitmapDrawable(myBmp), getResources().getDrawable(R.drawable.my_selector_list)});
imageView.setImageDrawable(d);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top