在做Android应用开发时,会碰到imageView尺寸小,用户难点击的情况,所以在不改变imageView大小情况,对其点击区域进行扩大。这里有两种方法可实现。
方法一:在imageView的xml布局中设置如下:
1.android:scaleType=“centerInside” 该属性表示若图片宽高等于或小于ImagevView的宽高,直到将图片的内容完整居中显示。
2.图片资源使用src不能用background,否则图片会被拉伸: android:src="@mipmap/…"
3.根据情况设置点击区域大小:android:layout_width="" android:layout_height=""
如图所示:白色方框都可以点击,android:layout_width="" android:layout_height=""属性控制它的大小。
原控件点击区域:
设置后:
调整边距:android:paddingLeft="-30dp"
方法二:在代码中实现,用于已指定图片大小不能更改android:layout_width="" android:layout_height=""属性。
在原view四边增加区域:
/**
* 扩大view的点击区域 单位px
* 一个parent布局只能设置一个view;点击区域超出parent的部分无效;view要先visible
*
* @param view
* @param top
* @param bottom
* @param left
* @param right
*/
public static void expandTouchArea(final View view, final int top, final int bottom, final int left, final int right) {
final View parentView = (View) view.getParent();
parentView.post(new Runnable() {
@Override
public void run() {
Rect rect = new Rect();
view.getHitRect(rect);
rect.top -= top;
rect.bottom += bottom;
rect.left -= left;
rect.right += right;
parentView.setTouchDelegate(new TouchDelegate(rect, view));
}
});
}
例如:
控件已经设置好大小,无法使用方法一:
使用:
private ImageView mAllSelectIv;
mAllSelectIv = rootView.findViewById(R.id.iv_allSelect);
expandTouchArea(mAllSelectIv,40,40,40,40);
注意方法二有很多约束:
1.一个parent布局只能设置一个view,设置多个后只有最后设置的view生效。
2.设置区域超出parent的那部分区域会无效;
3.view要可见,要注意fragment的UI绘制完成周期
若想在一个父布局扩大多个View的点击区域,可以在view嵌套一个RelativeLayout或LinearLayout布局,这样就一个父布局对应一个View,但是考虑到布局的性能优化,要尽量少嵌套。合理解决方法是:方法一和方法二灵活运用,也可以叫美工设计尺寸合适的图片后在用方法一。
本博客是参考网上有关知识并总结下来的,希望对你有帮助!