如何通过使用padding来扩大ImageView的可点击区域?

25

我有一个ImageView,我想让它可点击。图片本身只有32x32像素,但我希望可点击区域更大,这样更容易点击。我希望可以设置布局边距值来增加ImageView可点击区域的大小:

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

这种方法不起作用,我可以重新创建一个图像资源,在它周围加上更大的透明区域。这有点麻烦,因为如果我需要更改可点击区域,很难进行微调。而且它不仅仅是单个png文件,还是一个具有状态列表的Drawable,所以如果我需要微调可点击区域,就必须调整3个不同的png文件。

还有其他办法吗?

谢谢


这个解决方案可能适合你:http://stackoverflow.com/questions/3475350/how-to-set-a-clickable-region-for-an-imageview - McStretch
1
我知道这个问题已经有答案了,但在这种情况下,您需要使用TouchDelegate:http://developer.android.com/reference/android/view/TouchDelegate.html - Jerry Brady
4个回答

38

使用填充(padding)。布局外边距用于在视图范围之外插入空间。

要在所有侧面上获得相等的填充,请使用:

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

或者在每个侧面设置内边距

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

希望这能有所帮助!


1
这个答案本应该被标记为正确的! - GeertVc

12

与其调整图像大小(Peter Knego的回答)或增加填充(Saimon的回答),我建议结合使用minWidthminHeight属性以及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" />

这确保了小图片的最小尺寸为40x40dp,如果图像尺寸较小,则不会进行缩放。如果有一天将图像替换为另一个大于minWidthminHeight的图像,则它不会变得大于40x40dp,因为它会缩小。因此,始终保证了最小可点击尺寸为40x40dp,并且图像始终显示得很好。


9
建议(我自己从未尝试过):
  1. Create ImageView as large as you want than put image into it without scaling

    ImageView.setScaleType(ImageView.ScaleType.CENTER).
    
  2. Brute force approach: create new larger png that has original image centered and the rest of it is transparent.


最终采用了暴力方法。 - user291701
ImageView.setScaleType(ImageView.ScaleType.CENTER) 对我没用。它仍然将其全部缩放了。 - thekindofme
2
@thekindofme 如果您在ImageView上使用android:background而不是android:src,则添加填充将缩放图像。 - JP2014
来自未来的问候。 - David

3
请按照下面的方式使用,其中width/height是您的触摸半径。
<ImageView
  android:id="@+id/editProfile"
  android:layout_width="32dp"
  android:layout_height="32dp"
  android:padding="8dp"
  android:background="?attr/selectableItemBackgroundBorderless"
  android:src="@drawable/ic_edit"
  android:scaleType="fitCenter"
/>

在上面的代码中,我希望我的src大小以24dp的宽度/高度显示。触摸半径为32dp。因此,我使用了8dp的填充。

我是否错误地认为高度和宽度实际上应该是40(24+8+8),而不是32(24+8)?已添加的8dp填充已添加到所有边缘,因此从图标的总高度中删除了8*2 dp,而不仅仅是8。宽度也是如此。 - lukas hansen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接