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);
  }

结语

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

posted @ 2019-12-03 10:07  天下谁能不识君  阅读(...)  评论(... 编辑 收藏