点击控件以外的区域使页面(activity)关闭,dispatchTouchEvent用法

来源:互联网 发布:网络通则 编辑:程序博客网 时间:2024/06/03 19:47

在数据列表页,点击图片,放大显示的功能,放大显示的页面是个ViewPager,显示后,点击viewPager区域外的空白区域可关闭页面。点击ViewPager页面不做响应。

该viewPager设置为宽为match_parent,最大高度为300dp的区域。


关键代码:

@Override    public boolean dispatchTouchEvent(MotionEvent event){        if(event.getAction() == MotionEvent.ACTION_DOWN){            View view = mViewPager;            if(!inRangeOfView(view,event)){                click();            }        }        return super.dispatchTouchEvent(event);    }    //判断是否在控件区域内    private boolean inRangeOfView(View view,MotionEvent event){        int[] location = new int[2];        view.getLocationOnScreen(location);        int x = location[0];        int y = location[1];        if(event.getX() < x || event.getX() > (x + view.getWidth()) || event.getY() < y || event.getY() > (y + view.getHeight())){            return false;        }        return true;    }
//关闭页面    public void click(){//        Intent mIntent = new Intent();        // 设置结果,并进行传送//        this.setResult(3, mIntent);    System.gc();ImageLoader.getInstance().clearMemoryCache();        finish();        overridePendingTransition(R.anim.fade_in, R.anim.fade_out);    }

效果:点击中间宽为全屏,高为300dp的ViewPager区域,无响应,点击该区域上方或下方,关闭页面。
下面附上点击页面任意位置关闭页面,ViewPager的翻页功能不受影响的代码:
@Override    public boolean dispatchTouchEvent(MotionEvent event){        if(event.getAction() == MotionEvent.ACTION_DOWN){            downX = event.getX();            downY = event.getY();            LogUtil.d(TAG,"ACTION_DOWN==========downX===="+downX+",downY="+downY);        }else if(event.getAction() == MotionEvent.ACTION_UP){            upX = event.getX();            upY = event.getY();            LogUtil.d(TAG,"ACTION_UP==========upX===="+upX+",upY="+upY);            if(Math.abs(upX-downX)<100){                click();            }        }        return super.dispatchTouchEvent(event);    }



0 0
原创粉丝点击