开发时,我们经常使用ImageView显示图片,然后设置点击事件,但是会碰到一种情况,就是当图片很小时ImagView的点击区域很小,用户不容易点击到某个ImageView,那么我们怎么样在不改变图片大小的情况下,扩大ImageView的点击区域呢?
通常情况下ImageView的布局写法:
<ImageView
android:background="@mipmap/ic_launcher"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
这种写法就是图片多大,点击范围就多大。如果图片太小或者手机的分辨率较高,就会导致ImageView不容易被点击。
改进:
<ImageView
android:scaleType="centerInside"
android:src="@mipmap/ic_launcher"
android:layout_width="40dp"
android:layout_height="40dp"/>
这种写法就是设置了ImageView的大小,这个大小区域(40dp)就是ImageViwe的有效的点击区域,可以根据自己的情况修改大小。需要注意的是: 要使用 src 不能使用background 否则图像会被拉伸,并且要设置ImageView的这个属性
android:scaleType=“centerInside”
这个属性的作用:
(1)当图片大于ImageView的宽高:以图片的中心和ImageView的中心点为基准,按比例缩小图片,使图片宽高等于或者小于ImagevView的宽高,直到将图片的内容完整居中显示。
(2)当图片小于ImageView的宽高:直接居中显示该图片。
这样我们就保证了图像不被拉伸,并且点击范围扩大的效果。
但是这样每次都设置ImageView的centerInside属性还是不方便,这里我想到了ImageButton。
<ImageView
android:layout_width="40dp"
android:layout_height="40dp"
android:src="@mipmap/ic_launcher"
/>
<ImageButton
android:layout_width="40dp"
android:layout_height="40dp"
android:src="@mipmap/ic_launcher"
/>
都这样写的情况下,ImageView会根据设置的具体宽高尺寸变化,但是ImageButton只会显示图片的原始像素大小.
因此我们最终采用这种写法:
<ImageButton
android:layout_width="40dp"
android:layout_height="40dp"
android:src="@mipmap/ic_launcher"
/>
这样可以不拉伸图片,写法简单,也可以有效扩大图片的点击范围。