Android扩大控件的点击区域

在做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,但是考虑到布局的性能优化,要尽量少嵌套。合理解决方法是:方法一和方法二灵活运用,也可以叫美工设计尺寸合适的图片后在用方法一。

本博客是参考网上有关知识并总结下来的,希望对你有帮助!

你可能感兴趣的:(Android,控件,Android,扩大控件点击区域)