Android扩大控件的点击区域

在Android应用开发中,为了改善小尺寸ImageView的点击体验,可以通过设置xml布局属性或代码实现扩大点击区域。方法一是通过`android:scaleType="centerInside"`、`android:src`及调整`layout_width`和`layout_height`来实现;方法二是通过代码在原view四边增加点击区域,但这种方法存在一些限制。合理结合这两种方法,并注意布局优化,可以有效扩大ImageView的点击区域。
部署运行你感兴趣的模型镜像

在做Android应用开发时,会碰到imageView尺寸小,用户难点击的情况,所以在不改变imageView大小情况,对其点击区域进行扩大。这里有两种方法可实现。

方法一:在imageView的xml布局中设置如下:
1.android:scaleType=“centerInside” 该属性表示若图片宽高等于或小于ImagevView的宽高,直到将图片的内容完整居中显示。
2.图片资源使用src不能用background,否则图片会被拉伸: android:src="@mipmap/…"
3.根据情况设置点击区域大小:android:layout_width="" android:layout_height=""

<ImageView
            android:id="@+id/iv_back"
            android:layout_width="60dp"
            android:layout_height="60dp"
            android:scaleType="centerInside"
            android:src="@mipmap/fragment_batch_back" />

如图所示:白色方框都可以点击,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));
            }
        });
    }

例如:
控件已经设置好大小,无法使用方法一:

<ImageView
                android:id="@+id/iv_allSelect"
                android:layout_width="26dp"
                android:layout_height="26dp"
                android:src="@mipmap/fragment_batch_select" />

使用:

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

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

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值