在Activity中实现某View触摸其外部区域后,此View隐藏的效果

标题所说的效果,就是类似Dialog和PopupWindow的 setOutsideTouchable()。
按照惯例,先上效果图:

在Activity中实现某View触摸其外部区域后,此View隐藏的效果_第1张图片
show.gif

首先说一下效果图,我是怎么操作的:

  1. 点击放大镜,将EditText控件使用淡入动画显示出来。
  2. 在EditText上随便打了几个字。
  3. 点击EditText之外的其他区域,EditText通过渐淡出动画逐渐消失。

实现触摸其他位置EditText控件消失这个效果,需要重写Activity的onTouchEvent()方法。

实现思路是,判断触摸点的xy轴坐标。当触摸点x轴的值大于EditText的left值并小于EditText的right值,则可以判断触摸点x轴的位置处于EditText的left值和right值之间。同理,判断触摸点y轴的值。最后将结果取反,则可知触摸点处于EditText之外的位置。

  @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_DOWN) {
           if (!(event.getX() > editText.getLeft() && event.getX() < editText.getRight() && event.getY() > editText.getTop() && event.getY() < editText.getBottom())) {
                if (editText.getVisibility() == View.VISIBLE) {
                    AlphaAnimation alphaAnimation = new AlphaAnimation(1f, 0f);
                    alphaAnimation.setDuration(1000);
                    editText.startAnimation(alphaAnimation);
                    editText.setVisibility(View.GONE);
                }
            }
        }
        return super.onTouchEvent(event);
    }

你可能感兴趣的:(在Activity中实现某View触摸其外部区域后,此View隐藏的效果)