android View扩大触摸选区

原文链接地址,很详细

https://www.jianshu.com/p/ce14c7d96b0c

下面直接贴使用代码了

public class TouchDelegateComposite extends TouchDelegate {

    private final List<TouchDelegate> mDelegates = new ArrayList<>();
    private final View mParent;

    public TouchDelegateComposite(@NonNull View parent) {
        super(null, parent);
        mParent = parent;
    }

    public void addDelegate(@NonNull TouchDelegate delegate) {
        mDelegates.add(delegate);
    }

    public void build(){
        mParent.setTouchDelegate(this);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        boolean res = false;
        float x = event.getX();
        float y = event.getY();
        for (TouchDelegate delegate : mDelegates) {
            event.setLocation(x, y);
            res = delegate.onTouchEvent(event) || res;
        }
        return res;
    }
}

调用方式如下,其中view的rect扩选根据自身需求来定

protected void expandTouchView(View parent, View... views){
    Rect parentRect = new Rect();
    parent.getHitRect(parentRect);
    TouchDelegateComposite touchDelegateComposite = new TouchDelegateComposite(parent);
    for (View view : views) {
        Rect rect = new Rect();
        view.getHitRect(rect);
        rect.left = rect.left - ((ConstraintLayout.LayoutParams)view.getLayoutParams()).leftMargin;
        rect.top = parentRect.top;
        rect.right = rect.right + ((ConstraintLayout.LayoutParams)view.getLayoutParams()).rightMargin;
        rect.bottom = parentRect.bottom;
        touchDelegateComposite.addDelegate(new TouchDelegate(rect, view));
    }
    touchDelegateComposite.build();
}

可能大家觉得繁琐了吧(自己回头看也觉得)那就来个最简单的

viewGroup.post(() -> {
    Rect rect = new Rect();
    view.getHitRect(rect);
    rect.left -= 30;
    rect.top -= 30;
    rect.right += 30;
    rect.bottom += 30;
    TouchDelegate touchDelegate = new TouchDelegate(rect, view);
    viewGroup.setTouchDelegate(touchDelegate);
});

view为待扩展的控件,viewGroup为包裹view的容器

实现了view四周的外扩30px的范围,当然如果你的viewGroup尺寸跟view的尺寸一样,那肯定是没有效果的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值