微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

android 活动监听是否点击某个view

前述(写给做过web前端的人)

在web H5,如果判断当前是否点击某个元素,一般会这样写。

window.addEventListener("touchstart",function(et){
   if(e.target.id=='xx')
   {
   }
})

使用e.target 就能获取到真正点击的元素,自然帮我们排除了冒泡。
在web中,其实我们看到的可以假设是一张大图片,而事件真正的处理的其实依然是根据x以及y轴的坐标来判断点击的是哪个元素。
在android是没有target这种东西的,那么就需要我们用原始的方式执行。

实践

  1. 监听到活动的touch事件。(嗯,其实activity已经帮忙做了,开发者只需要override dispatchTouchEvent即可)
  2. 如何判断是否点击了某个元素。

判断是否点击某个元素

  private  boolean isTouchPointInView(View targetView,int currentX,int currentY)
  {
    if (targetView==null)
    {
      return false;
    }
    int[] localtion=new  int[2];
    targetView.getLocationOnScreen(localtion);
    int left=localtion[0];
    int top=localtion[1];
    int right=left+targetView.getMeasuredWidth();
    int bottom=top+targetView.getMeasuredHeight();
    if (currentY >= top && currentY <= bottom && currentX >= left
      && currentX <= right) {
      return true;
    }
    return  false;
  }

然后只要获取到x,y轴的坐标即可。

  @Override
  public boolean dispatchTouchEvent(MotionEvent ev) {
    switch (ev.getAction()) {
      case MotionEvent.ACTION_DOWN:
        View view=findViewById(R.id.test);
        //判断是否被点击
        if (!isTouchPointInView(view,(int) ev.getX(),(int) ev.getY()))
        {
          //如果没有点击任何处理
        }
        break;
    }
    return super.dispatchTouchEvent(ev);
  }

结语

以上只是个人笔记,如果对您有帮助的,我将感到荣幸。如果有不对的地方,请指正。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐