2010-11-05 9 views
12

Tengo un ImageView y quiero que se pueda hacer clic en él. La imagen en sí tiene solo 32x32 píxeles, pero quiero que la región en la que se puede hacer clic sea más grande para que sea más fácil de golpear. Tenía la esperanza de que pudiera establecer los valores de los márgenes de diseño para aumentar el tamaño del área seleccionable del imageview:¿Expandir el área seleccionable de un ImageView usando el relleno?

<ImageView 
    layout_width="32dip" 
    layout_height="32dip" 
    layout_margin="20dip" /> 

eso no funciona, lo que podría hacer es volver a crear el recurso de imagen que tienen una región transparente más grande alrededor eso. Eso es un poco molesto porque es difícil modificarlo si alguna vez necesito cambiar la región en la que se puede hacer clic. Tampoco es solo una png, es una lista de estado, por lo que tengo que cambiar el tamaño de 3 png diferentes si alguna vez necesito ajustar el área en la que se puede hacer clic.

¿Algo más que pueda hacer?

, gracias

+0

Esta solución podría funcionar para usted: http://stackoverflow.com/questions/3475350/how-to-set-a-clickable-region-for-an-imageview – McStretch

+1

Sé que esto ya ha sido respondido, pero en En estos casos, desea utilizar TouchDelegate: http://developer.android.com/reference/android/view/TouchDelegate.html –

Respuesta

6

Sugerencias (nunca probado a mí mismo):

  1. Crear ImageView tan grande como quiera que poner una imagen en ella sin escala

    ImageView.setScaleType(ImageView.ScaleType.CENTER). 
    
  2. método de fuerza bruta: crea un png más grande que tenga la imagen original centrada y el resto sea transparente.

+0

Terminó yendo con el método de la fuerza bruta. – user291701

+0

ImageView.setScaleType (ImageView.ScaleType.CENTER) no funcionó para mí. Se escalo todo de todos modos. – thekindofme

+0

@thekindofme Al agregar relleno, se escalará la imagen si está usando Android: fondo en lugar de android: src en ImageView. – JP2014

24

Utilice relleno. Los márgenes de diseño se utilizan para insertar espacio fuera del límite de la vista.

para la igualdad de relleno en todos los lados

<ImageView 
     android:padding="20dip" /> 

o para ajustar el relleno en cada lado

<ImageView 
    android:paddingLeft="10dip" 
    android:paddingRight="15dip" 
    android:paddingTop="23dip" 
    android:paddingBottom="12dip" /> 

Espero que ayude!

+0

almohadillado funciona mejor para la situación! – deathemperor

+0

Acabo de probar el relleno y de hecho funciona – sports

+0

¡Esta respuesta debería haberse marcado como la correcta! – GeertVc

6

En lugar de cambiar el tamaño de la imagen (la respuesta de Pedro Knego) o aumentar el acolchado (respuesta de Saimon) Sugiero para establecer los minWidth y minHeight atributos en combinación con scaleType="center":

<ImageView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:minWidth="40dp" 
    android:minHeight="40dp" 
    android:scaleType="center" 
    android:src="@drawable/your_image" /> 

que se asegura de que las pequeñas imágenes tienen por lo al menos un tamaño de 40x40dp mientras que la imagen no se escala si es más pequeña. Si un día la imagen va a ser reemplazada por otra imagen más grande que minWidth y minHeight, no crecerá más de 40x40dp a medida que se reduce de escala. Por lo tanto, siempre se garantiza una dimensión mínima seleccionable de 40x40dp y la imagen siempre se muestra correctamente.

Cuestiones relacionadas