在Activity中实现某View触摸其外部区域后,此View隐
2017-02-04 本文已影响152人
鲁克巴克诗
标题所说的效果,就是类似Dialog和PopupWindow的 setOutsideTouchable()。
按照惯例,先上效果图:
首先说一下效果图,我是怎么操作的:
- 点击放大镜,将EditText控件使用淡入动画显示出来。
- 在EditText上随便打了几个字。
- 点击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);
}